Mysql - 条件列等于两个或多个值

标签 mysql sql

最近我一直在研究高级搜索和他的查询构建器。现在我面临着一个小

问题,假设在我的搜索中我想包含所有具有完全类型 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/

相关文章:

php - 如何在 MYSQL 中回显存储为数组的值?

sql - 如何将 DISTINCT 与 string_agg() 和 to_timestamp() 一起使用?

php - 如何从表A中获取INT类型的id并将其插入到另一个表中?在 PHP 中

mysql - 选择昨天和一周前的结果

mysql - 如何更新 AWS RDS MySQL 实例中的 --thread_stack 值?

sql - 生成序列号

c# - Entity Framework 在调用 Any 或 Count 后抛出 NotSupportedException

sql - 比较 Ubuntu/Linux 上的 ms-sql 数据库架构

SQL - 如果在过去一小时内插入了新的唯一记录,则发出警报

php - 从表中选择特定列名