SQL选择多对多表

Jay*_*Sun 0 sql sql-server

我有3个表:Movies,Actors,和MovieActors.MovieActors是的许多一对多的关系Movies,并Actors与列MovieActorId,MovieId以及ActorId

如何查找包含特定演员集的电影?例如,我想找到所有同时拥有Michael Fassbender(演员Id 1)和Brad Pitt(演员Id 2)的电影.查询会是什么样的?

Con*_*rix 5

一种方法是加入表格.过滤为演员,然后确保计数有你想要的演员数量(在这种情况下为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 
Run Code Online (Sandbox Code Playgroud)

DEMO

注意

感谢user814064指出,因为Actors可以在电影上拥有多个角色,我们需要计算的DISTINCT ma.ActorID不仅仅是* SQL Fiddle Demo演示了差异