0

MoviesActors、およびの3 つのテーブルがありMovieActorsます。は、 と の列、、およびとMovieActorsの多対多の関係です。MoviesActorsMovieActorIdMovieIdActorId

特定の俳優が出演している映画を見つけるにはどうすればよいですか? たとえば、Michael Fassbender (俳優 ID 1) と Brad Pitt (俳優 ID 2) の両方が含まれるすべての映画を検索したいとします。クエリはどのようになりますか?

4

3 に答える 3

5

1 つの方法は、テーブルを結合することです。アクターをフィルタリングし、必要なアクターの数 (この場合は 2) がカウントに含まれていることを確認します。

SELECT 
   m.MovieID
FROM
    Movies m
    INNER JOIN MovieActors ma
    ON m.MovieID = ma.MovieID

WHERE
    ma.ActorID IN (1,2)
GROUP BY 
   m.MovieID
HAVING COUNT(DISTINCT ma.ActorID) = 2 

デモ

ノート

DISTINCT ma.ActorIDアクターは映画で複数の役割を持つことができるため、単に数える必要があることを指摘してくれた user814064 に感謝し* ます。SQL Fiddle Demo は違いを示しています

于 2013-09-17T21:42:24.540 に答える
2
select m.movieid
from movies m
inner join movieactors ma on ma.movieid = m.movieid
where ma.actorid in (1,2)
group by m.movieid
having count(distinct ma.actorid) = 2
于 2013-09-17T21:42:36.977 に答える
1

inシンプルにするために、次の 2 つの句を実行できます。

select * from Movies m
where m.MovieId in (select MovieId from MovieActors where ActorId = 1)
and m.MovieId in (select MovieId from MovieActors where ActorId = 2)

パフォーマンスは単一の ほど良くはないかもしれませんが、joinクリーンで読みやすいです。

于 2013-09-17T21:44:42.143 に答える