mysql - 使用 WHERE 和 AND 参数的 LEFT JOIN

标签 mysql sql database request

我有下表:

电影:

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

相关文章:

mysql - 如何将子查询与 INSERT 结合到 2 个不同的表 + 引用自动增量值

mysql - Ruby:mysql2-Gem 不工作(Mac OS X Snow Leopard,Ruby 1.9.2)

SQL Group By 问题 - 选择对哪一行进行分组

mysql - 从以前的最新记录中选择一列

php - Hostgator SQL 数据库未使用 PHP 表单更新

php - 来自数据库的 URL 和链接文本

php - 查找 MAX AVG 的 SQL 请求

mysql - 用空格连接Sql中的两个字符串

Python MySQLdb 错误 - 是什么导致了这个

android - 无法从 Android 中的 Assets 文件夹复制数据库