我写了一个查询,但结果不对。
这些是表格:
|actor|-->|role|-->|movie|->|movie_has_genre|-->|genre|
在每张桌子中我都有(表格:字段):
actor: actor_id
role: actor_id, movie_id
movie:movie_id
movie_has_genre: movie_id, genre_id
genre: genre_id
我正在寻找各种电影中演员的ids。
我的代码是:
SELECT a.actor_id
FROM actor a
WHERE NOT EXISTS(
SELECT *
FROM genre g
WHERE NOT EXISTS(
SELECT *
FROM movie m
WHERE m.movie_id in(
SELECT m1.movie_id
FROM movie m1, role r, movie_has_genre mg
WHERE a.actor_id=r.actor_id AND r.movie_id=m1.movie_id
AND m1.movie_id=mg.movie_id AND mg.genre_id=g.genre_id))
);
你能帮忙吗?
答案 0 :(得分:0)
这是伪代码,但你可以得到这个想法
select a.actor_id, count(mg.genre_id) as countkinds
from actor a
join role r on r.actor_id = a.actor_id
join movie_has_genre mg on mg.movie_id =r.movie_id
group by a.actor_id
having count(mg.genre_id) = (select count(*) from genre)
只需将演员加入genre_ids,计算并仅返回所有类型的演奏。
请注意,您无需加入电影表,因为您可以直接通过ID
为同一部电影加入角色和movie_has_genre