sql - 此 SQL 查询是否有更有效的替代方法?
问题描述
我正在研究一个电影数据集,该数据集包含电影、流派表和 in_genre 桥接表。以下查询尝试查找两部电影之间的共同类型。我做了两个连接来获取流派列表和一个相交来找到常见的流派。有没有更有效的方法?
表架构:
- 电影:movie_id(PK)(int)
- in_genre(bridge_table):movie_id(FK)(int),genre_id(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
解决方案
如果只需要其中的数据,in_genre
则无需加入movie
表。
您可以使用 anEXISTS
来查找常见的流派。
SELECT COUNT(DISTINCT genre_id) as common_genre
FROM in_genre ig
WHERE movie_id = 0109830
AND EXISTS
(
SELECT 1
FROM in_genre ig2
WHERE ig2.movie_id = 1375666
AND ig2.genre_id = ig.genre_id
)
推荐阅读
- reactjs - 可以在使用 appium 的真实设备上拍摄使用 Jest 的快照吗
- php - 在PayPal Rest API中,创建付款时,一笔付款可以进行多笔交易?
- java - 用于随机数据采样的键/值存储
- websocket - 处理草图中带有 Websocket 的 NullPointerException
- ios - iOS 通用链接:忽略带参数的路径
- javascript - TS:在实现接口的抽象类的实现中缺少可选成员的类型
- corda - Corda 节点为同一状态生成不同的线性 ID
- arduino - Arduino shield SIM900 不响应 AT 命令
- python - 如何根据 Python 中的条件创建结果组合矩阵?
- kotlin - Kotlin - 在 hashmap 上使用 apply 或 also 不能按预期工作