mysql - 如何解决这个关系划分查询?

标签 mysql sql relational-division

我有一个包含两个外键的表 (movies),(movie_id, genre_id)。当然,这两个字段都不是唯一的。

如何选择具有两种或更多种特定类型的电影?

我想做这样的事情:

SELECT movie_id 
FROM movies
WHERE genre_id = 1 AND genre_id = 2 AND genre_id = 3

最佳答案

这是一个关系划分问题。

SELECT movie_id 
FROM   movies
WHERE  genre_id IN (1, 2, 3)   -- <<== list of genre_id
GROUP  BY movie_id
HAVING COUNT(*) = 3            -- <<== count of genre_id

如果 genre_id 对于每个 movie_id 不是唯一的,则需要一个 DISTINCT 关键字来过滤唯一的。

SELECT movie_id 
FROM   movies
WHERE  genre_id IN (1, 2, 3)             -- <<== list of genre_id
GROUP  BY movie_id
HAVING COUNT(DISTINCT genre_id) = 3      -- <<== count of genre_id

关于mysql - 如何解决这个关系划分查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16803909/

相关文章:

mysql - 选择最后一个事件类型为 X 的所有用户

php - Codeigniter 2联接一对多查询3个表

SQL:如何将多个表的计数结果合并到多列中

sql - 让简单的 SQL 更高效

SQL 检索包含其他表中所有行的行

sql - 仅使用具有 `in` 子句中所有值的列连接查询

mysql - 如果日期不存在,则获取给定日期的最后一行

php - 在 Windows 上为 MySQL 安装 PDO 驱动程序

mysql - 如何从与任何列字符串匹配的字符集获取mysql中的行?

SQL - 仅按最大日期选择唯一名称?