movies2 つの外部キー ( movie_id、 )を持つテーブル ( ) がありますgenre_id。もちろん、両方のフィールドが一意ではありません。
特定のジャンルが 2 つ以上ある映画を選択するにはどうすればよいですか?
私は次のようなことをしたい:
SELECT movie_id
FROM movies
WHERE genre_id = 1 AND genre_id = 2 AND genre_id = 3
movies2 つの外部キー ( movie_id、 )を持つテーブル ( ) がありますgenre_id。もちろん、両方のフィールドが一意ではありません。
特定のジャンルが 2 つ以上ある映画を選択するにはどうすればよいですか?
私は次のようなことをしたい:
SELECT movie_id
FROM movies
WHERE genre_id = 1 AND genre_id = 2 AND genre_id = 3
これはRelational Division問題です。
SELECT movie_id
FROM movies
WHERE genre_id IN (1, 2, 3) -- <<== list of genre_id
GROUP BY movie_id
HAVING COUNT(*) = 3 -- <<== count of genre_id
genre_idがすべてmovie_idの で一意でない場合は、DISTINCT一意のものをフィルタリングするためにキーワードが必要です。
SELECT movie_id
FROM movies
WHERE genre_id IN (1, 2, 3) -- <<== list of genre_id
GROUP BY movie_id
HAVING COUNT(DISTINCT genre_id) = 3 -- <<== count of genre_id
これは、「set-within-sets」クエリの例です。having最も一般的な方法は、すべての条件を句に入れることだと思います。
SELECT movie_id
FROM movies
group by movie_id
having sum(case when genre_id = 1 then 1 else 0 end) > 0 and
sum(case when genre_id = 2 then 1 else 0 end) > 0 and
sum(case when genre_id = 3 then 1 else 0 end) > 0;
句の各having句は、各タイプのジャンルに一致するレコードの数をカウントしています。