簡體   English   中英

SQL在多對多表上選擇

[英]SQL select on a many-to-many table

我有3張桌子: MoviesActorsMovieActors MovieActorsMoviesActors的多對多關系,其MovieActorIdMovieIdActorId

如何查找其中具有特定演員集的電影? 例如,我要查找所有同時具有Michael Fassbender(演員ID 1)和Brad Pitt(演員ID 2)的電影。 查詢是什么樣的?

一種方法是聯接表。 篩選演員,然后確保人數中有您想要的演員人數(本例中為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 

演示

注意

感謝user814064指出,由於Actors在電影中可以扮演多個角色,因此我們需要計算DISTINCT ma.ActorID不僅* SQL Fiddle Demo演示了區別

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

為簡單起見,您可以執行以下兩個in子句:

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 ,但是它很干凈而且易於閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM