と の 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;
MAX
ANDHAVING
が処理される 順序と関係がありますか?
これを行う簡単な方法は、サブクエリを使用することです。
SELECT * FROM students
WHERE sno NOT IN
(SELECT sno FROM take WHERE cno = 'CS112');
しかし、私は使用してバージョンを理解することに興味がありますJOIN