おそらく2人の生徒にとって、最もシンプルで、最もクリーンで、最速です :
SELECT count(*) AS ct
FROM student_club x
JOIN student_club y USING (stud_id)
WHERE x.club_id = 30
AND y.club_id = 50;
student
に参加する必要はありません このためのテーブル-stud_id
のリストがわかったらすぐに 興味があります。
任意の数の学生 、マーティンのクエリはより便利です。同様の方法で簡略化できます:
SELECT count(*) AS ct
FROM (
SELECT stud_id
FROM student_club
WHERE club_id IN (30, 50)
GROUP BY 1
HAVING count(*) = 2 -- adapt to number of items in list
) x;
(stud_id, club_id)
が必要です もちろんユニークであり、そのリストアイテムもユニークです。