2017-08-31 4 views
0

学生が登録されていない部門の名前を取得する必要があります。ジョインでWHERE NOT NOTを使用して類似しないデータを取得していますか?

表:部門

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 join t2 on t1.a = t2.b ... ' – jarlh

+0

SQLSERVERまたはORACLEまたは他のDB – Ajay2707

+0

[NOT INとNOT EXISTS]の可能な複製(https:// stackoverflow。 com/questions/173041/not-in-vs-not-exists) – Ajay2707

答えて

1

stud_memberdept_idと仮定するとEXISTS、NOTを使用してこの問題に

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があると空の結果を返します。代わりに 'NOT EXISTS'を実行してください。 – jarlh

0

を持っていないあなたはどこのすべての部門を選択することができます示唆したようdept_idFOREIGN KEY

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

あるとき真であるNULLすることはできません左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 
関連する問題