SQL:错误的输出

时间:2014-02-27 16:12:54

标签: sql

我写了一个查询,但结果不对。

这些是表格:

|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))        
);

你能帮忙吗?

1 个答案:

答案 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