Mysql 查找具有其他表中所有值的所有ID
在三个表格中:Mysql 查找具有其他表中所有值的所有ID,mysql,Mysql,在三个表格中: Actors: +------------------+ | id_a | actor_name| +------------------+ | 1 | AAA | | 2 | Bbb | | 3 | Ccc | | 4 | Ddd | | 5 | Eee | +------------------+ Movies: +----------------+ | id_m | mov_name
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 |
+-------------+
是否可以编写一个查询来获取:来自查询的演员播放的所有电影
示例:选择id_m,其中1,3,4,5中的id_a应给出:
+------+
| id_m |
+------+
| 1 |
| 2 |
+------+
然而。。选择id_m,其中1,9中的id_a应为NULL
我尝试过类似的查询:,写了如下内容:
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\u m:1,
如果我用“或”就差不多了,
但对我来说,重要的是让所有的电影都能让演员们,
被质疑的演员或更少,从来没有在质疑中遗漏演员的电影。
应该如何编写?使用group by并拥有:
这是可行的,但如果我尝试在1、3、9、12、13、14中搜索id_a,我没有得到所需的结果id_m:2。若我不得不更改,但我需要包含查询中所有ID或更少ID的电影,若电影中的演员比查询中列出的多,那个么它不应该出现在结果中
SELECT id_m
FROM table
WHERE id_a IN (1, 9)
GROUP BY id_m
HAVING COUNT(DISTINCT id_a) = 2;