在三个表中:
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 by
和having
:
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/