2013-10-17 60 views
0

我想獲得從未教過課程部分的導師名單。NOT IN子查詢返回沒有結果

我第一選擇,我得到一堆誰教一門課程

SELECT w.COURSE_NO,z.SALUTATION, z.FIRST_NAME, z.LAST_NAME,z.ZIP 
FROM INSTRUCTOR z , SECTION w 
WHERE z.INSTRUCTOR_ID = w.INSTRUCTOR_ID; 

但是當我不這樣我可以看到什麼教練從來沒有教過的課程部分它沒有給我行的結果。

SELECT a.SALUTATION, a.FIRST_NAME, a.LAST_NAME,a.ZIP 
FROM INSTRUCTOR a,SECTION b 
WHERE a.INSTRUCTOR_ID = b.INSTRUCTOR_ID AND b.COURSE_NO NOT IN 
(SELECT w.COURSE_NO 
FROM INSTRUCTOR z , SECTION w 
WHERE z.INSTRUCTOR_ID = w.INSTRUCTOR_ID) 
ORDER BY a.SALUTATION, a.FIRST_NAME, a.LAST_NAME,a.ZIP; 

爲什麼當我試圖選擇那些從來沒有一個課程節的時候,它給了我沒有行?

+0

檢查有關'LEFT JOIN' – zerkms

+5

它給你0行,因爲你的子查詢,你的主要查詢具有相同的條件和加盟,這意味着它們返回相同的結果。您的查詢變爲'select * from不在(從id中選擇id)'的位置。您的查詢不正確。你能發佈樣本數據(原始和預期結果)嗎? – Ben

+0

它應該是'WHERE INSTRUCTOR NOT IN(SELECT INSTRUCTOR ...)',子查詢返回已經教過某部分的教師列表。 – Barmar

回答

2

因爲您只獲取SECTION中的行。這似乎是你想要的:

SELECT a.SALUTATION, a.FIRST_NAME, a.LAST_NAME,a.ZIP 
FROM INSTRUCTOR a 
WHERE a.INSTRUCTOR_ID NOT IN 
(SELECT w.INSTRUCTOR_ID 
FROM SECTION w) 
ORDER BY a.SALUTATION, a.FIRST_NAME, a.LAST_NAME,a.ZIP; 

或者

SELECT a.SALUTATION, a.FIRST_NAME, a.LAST_NAME,a.ZIP 
FROM INSTRUCTOR a 
LEFT JOIN SECTION w ON a.INSTRUCTOR_ID = w.INSTRUCTOR_ID 
WHERE w.INSTRUCTOR_ID IS NULL 
ORDER BY a.SALUTATION, a.FIRST_NAME, a.LAST_NAME,a.ZIP; 
+0

我當時的課程編號而不是教練:(...我只是完全延緩..謝謝! – Ris