我正在开发一个电影数据集,其中包含电影表、体裁表和桥接表in_genre。下面的查询试图在两部电影之间找到常见的类型。我做了两个联接,以获得类型列表和一个相交,以找到共同的类型。有没有更有效的方法?
表模式:
电影: movie_id(PK)(int)
SELECT count(*) as common_genre
FROM(
// getting genres of first movie
SELECT in_genre.genre_id
FROM movie INNER JOIN in_genre ON movie.id = in_genre.movie_id
WHERE movie.id = 0109830
INTERSECT
// getting genres of second movie
SELECT in_genre.genre_id
FROM movie INNER JOIN in_genre ON movie.id = in_genre.movie_id
WHERE movie.id = 1375666
) as genres
发布于 2020-02-05 16:56:32
如果你想要体裁,我只想:
SELECT genre_id as common_genre
FROM in_genre ig
WHERE movie_id IN (0109830, 1375666)
GROUP BY genre_id
HAVING COUNT(*) = 2;
如果要计数,子查询就足够简单了:
SELECT COUNT(*)
FROM (SELECT genre_id as common_genre
FROM in_genre ig
WHERE movie_id IN (0109830, 1375666)
GROUP BY genre_id
HAVING COUNT(*) = 2
) g;
如果您想要有关类型的完整信息,那么我建议您使用exists
select g.*
from genres g
where exists (select 1
from in_genre ig
where ig.genre_id = g.genre_id and ig.movie_id = 0109830
) and
exists (select 1
from in_genre ig
where ig.genre_id = g.genre_id and ig.movie_id = 1375666
);
https://stackoverflow.com/questions/60080333
复制相似问题