我有下表:
电影:
+----------+--------------+
| movie_id | title |
+----------+--------------+
| 1 | Wonder Woman |
+----------+--------------+
Actor :
+----------+--------------+
| id | name |
+----------+--------------+
| 1 | Gal Gadot |
+----------+--------------+
| 2 | Chris Pine |
+----------+--------------+
Movie_cast:
+----------+--------------+--------------+
| id | movie_id | cast_id |
+----------+--------------+--------------+
| 1 | 1 | 1 |
+----------+--------------+--------------+
| 2 | 1 | 2 |
+----------+--------------+--------------+
基本上,盖尔·加朵和克里斯·派恩都是电影《神奇女侠》的一部分。
我的问题是我想找到他们都在的所有电影。我不想要他们单独播放的任何电影,只想要他们都在的电影类型转换。
我尝试过这样的事情:
SELECT * FROM movies
LEFT JOIN movie_cast ON movie_cast.movie_id = movies.movie_id
LEFT JOIN cast ON movie_cast.cast_id = cast.id
WHERE cast.id = 1 AND cast.id = 2
但是结果是空的。
最佳答案
你应该使用这个:
SELECT m.movie_id, m.title
FROM movies m
INNER JOIN movie_cast mc ON mc.movie_id = m.movie_id
WHERE mc.cast_id = 1 OR mc.cast_id = 2
GROUP BY m.movie_id, m.title
HAVING COUNT(*) = 2; -- HAVING COUNT(DISTINCT mc.cast_id) = 2; -- for unnormalized data
无需LEFT JOIN,只需在需要按 Actor 姓名查找时加入cast
表即可
关于mysql - 使用 WHERE 和 AND 参数的 LEFT JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44533991/