带有 WHERE 和 AND 参数的 LEFT JOIN

埃拉克

我有以下表格:

电影 :

+----------+--------------+
| movie_id |     title    |
+----------+--------------+
|    1     | Wonder Woman |
+----------+--------------+

投 :

+----------+--------------+
| id       |     name     |
+----------+--------------+
|    1     |   Gal Gadot  |
+----------+--------------+
|    2     |  Chris Pine  |
+----------+--------------+

电影演员:

+----------+--------------+--------------+
| 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

但结果是空的。

范 X. 巴赫

你应该使用这个:

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,只需要cast在需要通过演员表名称查找时加入

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章