最近我一直在研究高级搜索和他的查询构建器。现在我面临着一个小
问题,假设在我的搜索中我想包含所有具有完全类型 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 - 条件列等于两个或多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24201705/