2017-08-31 50 views
0

我需要檢索沒有學生註冊的部門的名稱。使用WHERE不在連接中檢索不同的數據?

表:部門

dept_id dept_name 
     1 IT 
     2 Electrical 
     3 Civil 
     4 Mechanical 
     5 Chemical 

表:stud_member

f_name dept_id age 
     AB   2  19 
    Rose   3  22 
    May   1  20 
    Noor   1  21 
    Haya   1  19 
    April  3  23 
    Sakina   2  20 

例如機械和化學名稱。我已經使用外部連接爲它寫了這個查詢(顯式也許?)但顯示一個錯誤。

,請告訴我,我爲什麼不能寫:

SELECT dept_id, dept_name 
FROM department 
LEFT JOIN stud_member ON (WHERE NOT department.dept_id = stud_member.dept_id); 

我會很感激,如果有人會告訴我正確的答案!

+0

'select ... from t1 left在t1.a = t2.b ...上連接t2 ...' – jarlh

+0

SQLSERVER ORACLE或任何其他DB – Ajay2707

+0

[NOT IN vs NOT EXISTS](https:// stackoverflow。 com/questions/173041/not-in-vs-not-exist) – Ajay2707

回答

1

假設在stud_memberdept_id不能NULL哪個是真當dept_idFOREIGN KEY

SELECT dept_id, dept_name 
FROM department 
WHERE dept_id NOT IN (SELECT dept_id FROM stud_member); 

如使用NOT EXISTS沒有這個問題

SELECT d.dept_id, d.dept_name 
FROM department d 
WHERE NOT EXISTS (SELECT * FROM stud_member s WHERE d.dept_id = s.dept_id); 
+1

如果有一個帶有dept_id null的stud_member,將返回一個空的結果。而不是「不存在」。 – jarlh

0

您可以選擇所有部門,其中建議Left JOIN的右部分爲NULL

SELECT d.dept_id, d.dept_name 
FROM department d 
    LEFT JOIN stud_member sm ON d.dept_id = sm.dept_id 
WHERE sm.dept_id IS NULL 
相關問題