mysql - 从其他表中查找具有所有值的所有 ID

标签 mysql

在三个表中:

Actors:
+------------------+
| id_a | actor_name|
+------------------+
|   1  | AAA       |
|   2  | Bbb       |
|   3  | Ccc       |
|   4  | Ddd       |
|   5  | Eee       |
+------------------+

Movies:
+----------------+
| id_m | mov_name|
+----------------+
| 1    |   LoR   |
| 2    |  Thron  |
| 3    |   ZsT   |
+----------------+

actors_in_movies:
+-------------+
| id_m | id_a |
+-------------+
| 1    |  1   |
| 1    |  3   |
| 1    |  5   |
| 2    |  1   |
| 2    |  3   |
| 3    |  2   |
| 3    |  3   |
| 3    |  4   |
| 3    |  5   |
+-------------+

是否可以编写一个查询来获取:查询中的 Actor 播放的所有电影?

示例:SELECT id_m WHERE id_a IN (1,3,4,5),应该给出:

+------+
| id_m |
+------+
|  1   |
|  2   |
+------+

然而.. SELECT id_m WHERE id_a IN (1,9) 应该给出 NULL。

我试过类似的查询:Finding ID having all values (mySQL, SQL) ,写这样的东西:

SELECT id_m, count(*), group_concat(id_a) as all_act 
FROM actors_in_movies 
WHERE
 id_m IN (SELECT id_m FROM actors_in_movies WHERE id_a = 1)
AND
 id_m IN (SELECT id_m FROM actors_in_movies WHERE id_a = 3)
AND
 id_m IN (SELECT id_m FROM actors_in_movies WHERE id_a = 5)
GROUP BY (id_m)
HAVING count(*) <= 3

它只显示一部电影 (id_m: 1), 如果我使用“或”,几乎可以, 但对我来说重要的是要获得查询中 Actor 播放的所有电影, 询问 Actor 或更少,从不询问 Actor 遗漏的电影。 应该怎么写?

最佳答案

使用group byhaving:

SELECT id_m
FROM table
WHERE id_a IN (1, 9) 
GROUP BY id_m
HAVING COUNT(DISTINCT id_a) = 2;

关于mysql - 从其他表中查找具有所有值的所有 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28574400/

相关文章:

mysql - 有没有办法在使用 SQL 从表中提取列时更改列中的现有数据

mySQL - 仅从数据库中获取最高分

MySQL检查文本日期是否在两个日期之间

php - 在 WordPress 管理页面中回显tinyint

带有 MySQL 的 ASP.NET MVC 4 Web API 不断抛出 DataReader Open 异常

php - PHP-从服务器检索 future 日期的值

mysql - Drupal 不能安装在以默认设置运行的 MySQL 服务器上吗?

php - 获取数据库的最后一个实体,增加它的值并创建新记录 PHP SQL

php - MySQL 使用 BETWEEN 检索数据

php - 我无法使用 PDO 过程更新数据中的状态行