在表A中选择与表B中的所有项目集相交的行

时间:2016-05-23 02:07:51

标签: mysql sql database inner-join

基于this image(忘记"流派"但是):

我有一个演员列表,需要检索列表中包含每个演员的电影列表。

示例数据:

INSERT INTO actor (actor_id, name) VALUES
    (1, "Alice"), (2, "Bob");

INSERT INTO film (film_id, title) VALUES
    (1, "Star Wars"), (2, "The Matrix"), (3, "Lion King);

INSERT INTO actor_film_mapping (actor_id, film_id) VALUES
    (1, 1),
    (1, 2), (2, 2),
    (2, 3);

寻找例如包含Alice和Bob的电影列表应该只给我The Matrix

我最接近的是this query,它选择了我的演员列表任何的电影,而不是 all 的电影。

在StackOverflow上寻找类似的答案,我得到了this,它可以在MSSQL中运行,但不能在MySQL中运行。

希望我已经说好了这个问题。我是StackOverflow的新手

1 个答案:

答案 0 :(得分:0)

你非常接近。不使用select distinct,而是使用having进行聚合并计算匹配数:

SELECT f.*
FROM film f INNER JOIN
     actor_film_mapping afm
     ON f.film_id = afm.film_id
WHERE afm.actor_id IN (1, 2)
GROUP BY f.film_id
HAVING COUNT(*) = 2;