2011-05-02 66 views
3

治療(StaffNoPatientID,起始日期,原因)從關係代數到SQL

查找誰把通過其工作人員數量的醫生治療的所有患者所有醫生的員工人數是603

在關係代數

鴻溝(項目處理過StaffNo,PatientId) 通過 項目(選擇治療,其中StaffNumber = '603')在PatientId

我想在SQL中使用它。

這是SQL嗎?

SELECT DISTINCT staff_no 
FROM treatment AS t1 
WHERE NOT EXISTS (SELECT * 
        FROM treatment as s2 
        WHERE s2.staff_no = '603' 
        AND NOT EXISTS (SELECT * 
            FROM treatment AS t3 
            WHERE t1.staff_no = t3.staff_no 
             AND t3.patient_id = s2.patient_id)); 
+0

見http://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/ – 2011-05-02 18:11:37

+1

'我想在SQL ,請.'不是一個問題。告訴我們您嘗試過的方式,以及您遇到問題的位置。如果你沒有得到它,這聽起來像你需要再次回到基礎知識。 – mellamokb 2011-05-02 18:12:08

+0

我想用美元,但這不是真的這個網站的用途。請參閱[常見問題](http://stackoverflow.com/faq) – 2011-05-02 18:12:21

回答

0

有從關係代數SQL沒有直接翻譯,如SQL更analagous到關係演算。關係代數是程序性的;你正在定義如何獲取你想要的數據。關係演算(和SQL)定義了什麼你想要的數據,並將實現留給RDBMS。

這就是說,在SQL中沒有關係代數的劃分運算符的等價物。你將不得不更清楚地陳述你想要的東西。

作爲一個說明,強烈建議與功課有關的問題說清楚(因爲這個問題是關於關係代數,我懷疑它是);如果這是爲了學校,請說實話。

+0

好吧,忘記關係代數。 我希望這個查詢「查找所有醫生治療的醫生的人員編號是603」 在SQL中處理的所有醫生的工作人員號碼。 表治療(StaffNo,PatientID,StartDate,原因) – Prince 2011-05-02 18:21:41

+0

沒有內置的操作符,但雙'不存在'或'分組依靠'和'count'可以完成這項工作http://www.simple-talk.com/sql/ t-sql-programming/divided-we-stand-the-sql-of-relational-division/ – 2011-05-02 18:22:29

+0

@Martin:請注意,我說沒有直接翻譯,不是說同樣的結果是不可能的。儘管您提出的是通用解決方案,但擁有更多信息(如OP所提供的)通常會產生更清晰,更優化的解決方案。 – 2011-05-02 18:24:37

1

謝謝大家的幫助。

我找到了答案。

該SQL非正式地等同於關係鴻溝。

SELECT DISTINCT staff_no 
FROM treatment AS t1 
WHERE NOT EXISTS (SELECT * 
        FROM treatment as s2 
        WHERE s2.staff_no = '603' 
        AND NOT EXISTS (SELECT * 
            FROM treatment AS t3 
            WHERE t1.staff_no = t3.staff_no 
             AND t3.patient_id = s2.patient_id));