2

movies2 つの外部キー ( movie_id、 )を持つテーブル ( ) がありますgenre_id。もちろん、両方のフィールドが一意ではありません。

特定のジャンルが 2 つ以上ある映画を選択するにはどうすればよいですか?

私は次のようなことをしたい:

SELECT movie_id 
FROM movies
WHERE genre_id = 1 AND genre_id = 2 AND genre_id = 3
4

2 に答える 2

6

これは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
于 2013-05-29T01:07:07.090 に答える
2

これは、「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句は、各タイプのジャンルに一致するレコードの数をカウントしています。

于 2013-05-29T01:09:51.867 に答える