使用WHERE NOT在联接中检索不同的数据?

时间:2017-08-31 12:19:36

标签: sql

我需要检索没有学生注册的部门的名称。

表:部门

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);

如果有人能告诉我正确答案,我将不胜感激!

2 个答案:

答案 0 :(得分:1)

假设dept_id中的stud_member不能NULLdept_idFOREIGN KEY

时属于SELECT dept_id, dept_name FROM department WHERE dept_id NOT IN (SELECT dept_id FROM stud_member);
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);

建议使用NOT EXISTS没有这个问题

1 2 1 3 4 5 4 4

答案 1 :(得分: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