[英]SQL select on a many-to-many table
我有3張桌子: Movies
, Actors
和MovieActors
。 MovieActors
是Movies
和Actors
的多對多關系,其MovieActorId
, MovieId
和ActorId
如何查找其中具有特定演員集的電影? 例如,我要查找所有同時具有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.