最近,我一直在进行高级搜索和他的查询生成器。现在我面对一个小
问题,可以说在我的搜索中,我想包括所有具有genre_id 100和101的电影,所以基本上我应该只获得movie_id 10
[Movie Table]
movie_id |title |...
10 |Bruce Almighty
11 |Matrix
[Movie Genres Table]
movie_id | genre_id |...
10 |100
11 |101
10 |101
... |...
[movie Version Table]
movie_id | version_id |...
10 |20
10 |21
11 |20
10 |22
[movie language Table]
movie_id | language_id |...
10 |30
10 |40
11 |11
11 |14
查询如下:
SELECT movie_id,title from movie WHERE title LIKE '%Bruce%'
我不能使用HAVING,因为我有更多字段可以完全相同,例如版本(标准,扩展等)。
任何想法如何解决这个问题?
更新:
我可能会继续添加XD这样的表,基本上是一对一的具有相同结构的关系表...而且我必须动态地构建查询(以便我只包含所需的条件)
最佳答案
只需使用仅包含与两个流派相关联的电影ID的IN子句。
SELECT movie_id, title
FROM movie
WHERE title LIKE '%Bruce%'
AND movie_id IN
(
SELECT movie_id
FROM movie_genre
GROUP BY movie_id
HAVING MIN(genre_id) = 100 AND MAX(genre_id) = 101
);
编辑:这是关于同一查询,只是功能更广泛(您可以具有更多的值,它们不需要相邻):
SELECT movie_id, title
FROM movie
WHERE title LIKE '%Bruce%'
AND movie_id IN
(
SELECT movie_id
FROM movie_genre
GROUP BY movie_id
HAVING
MAX(CASE WHEN genre_id = 100 THEN 1 ELSE 0 END) = 1 AND
MAX(CASE WHEN genre_id = 101 THEN 1 ELSE 0 END) = 1
MAX(CASE WHEN genre_id NOT IN (100,101) THEN 1 ELSE 0 END) = 0
);
关于mysql - MySQL-条件列等于两个或多个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24201705/