と の 2 つの単純なテーブルがstudents(sno,sname,age)ありtake(sno,cno)ます。学生とコース間の関係Takeの表です。
特定のコースを受講していない学生を見つけたい。 N-N
次のクエリは仕事をしますが、それがどのように機能するかは明確ではありません:
SELECT s.sno,s.sname,s.age
FROM students s LEFT JOIN take t
ON (s.sno = t.sno)
GROUP BY s.sno,s.sname,s.age
HAVING MAX(CASE WHEN t.cno = 'CS112' THEN 1 ELSE 0 END) = 0;
MAXANDHAVINGが処理される 順序と関係がありますか?
これを行う簡単な方法は、サブクエリを使用することです。
SELECT * FROM students
WHERE sno NOT IN
(SELECT sno FROM take WHERE cno = 'CS112');
しかし、私は使用してバージョンを理解することに興味がありますJOIN