我有一个类似于这样的表结构:
Movies
movie_id genre_id
1 1
2 5
1 2
5 5
1 5
所以有许多类型的电影。我需要根据长度可变的类型来选择电影,即我被指定查找具有genre_id
的电影:1和5(例如)。但是我似乎找不到一种方法来选择它们而不使用很多派生表(如选择每个类型而不是将它们连接在一起)或使用OR
(实际上意味着OR
所以选择1而不是5,反之亦然。
显然使用WHERE
不起作用,因为条件WHERE genre_id = 1 AND genre_id = 5
不可满足。如何在不使用许多派生表(或更快)的情况下执行此操作,并且是否存在这种模式的一般方法(因为我非常确定这是组织数据的一种非常常见的方式)。
答案 0 :(得分:2)
您可以使用GROUP BY查询:
SELECT movie_id
FROM movies
WHERE genre_id IN (1,5)
GROUP BY movie_id
HAVING COUNT(*)=2
这里你可以计算满足条件genre_id IN(1,5)
的行数