一見単純な問題を解決しようとしていますが、EXISTS キーワードがどのように機能するかについての理解につまずいていると思います。この問題は単純です (これは実際の問題の単純化されたバージョンです) - 私は学生のテーブルと趣味のテーブルを持っています。学生テーブルには、学生 ID と名前があります。同じ数の趣味を共有する学生のみを返します (つまり、趣味の数が一意である学生は表示されません)。
だから私が遭遇する難しさは、趣味の数を比較する方法を考え出すことです. 私が試したのはこれです。
SELECT sa.studentnum, COUNT(ha.hobbynum)
FROM student sa, hobby ha
WHERE sa.studentnum = ha.studentnum
AND EXISTS (SELECT *
FROM student sb, hobby hb
WHERE sb.studentnum = hb.studentnum
AND sa.studentnum != sb.studentnum
HAVING COUNT(ha.hobbynum) = COUNT(hb.hobbynum)
)
GROUP BY sa.studentnum
ORDER BY sa.studentnum;
そのため、hobbynum のカウントが各テストで同じであるため、同じ数の趣味に一致するテーブルだけでなく、元のテーブルがすべて返されるように見えます。