sqlite - Sqlite:查找具有共同值的记录对
问题描述
我有两个看起来像这样的表:
movie_cast
movie_id | cast_id | cast_name
10 2 Mark Hamill
10 3 Harrison Ford
10 4 Carrie Fisher
12 10 James Earl Jones
12 2 Mark Hamill
12 3 Harrison Ford
12 4 Carrie Fisher
movies
id | title
10 Star Wars IV
12 Star Wars V
我需要创建一个查询,返回至少一起出演过 2 部电影的演员对。
所以它应该看起来像这样:
cast_member_id1 | cast_member_id2
2 3
3 4
我通常会输入自己的查询,但我不知道从哪里开始在 SQLite 中获取对。
解决方案
您可以生成所有具有自联接和一些分组的唯一参与者对,使用min()
和max()
获取规范顺序。然后使用带有另一个自连接的子查询来获取两者共享电影的次数:
WITH cast_pairs AS
(SELECT min(a.cast_id,b.cast_id) AS cast_member_id1,
max(a.cast_id,b.cast_id) AS cast_member_id2
FROM movie_cast AS a
JOIN movie_cast AS b ON a.cast_id <> b.cast_id
GROUP by 1,2)
SELECT *
FROM cast_pairs
WHERE (SELECT count(*)
FROM movie_cast AS m1
JOIN movie_cast AS m2 ON m1.movie_id = m2.movie_id
WHERE m1.cast_id = cast_member_id1 AND m2.cast_id = cast_member_id2) >= 2;
这使
cast_member_id1 cast_member_id2
--------------- ---------------
2 3
2 4
3 4
推荐阅读
- python - Pandas MultiIndex Dataframe Groupby Rolling Mean
- node.js - MongoDB 客户端字段级别加密 - NodeJS 驱动程序 - 未在本地密钥库的数据密钥文档中创建 keyAltNames 字段
- flutter - 如何不渲染null?
- php - 通过在 Laravel 中添加特定项目来获取模型值
- c++11 - 件的控制流
- android - 可以在某个 android 版本之后删除库吗?
- node.js - 提交多个字段的表单
- typescript - 泛型类型函数中的类型“某物”上不存在属性
- python - 将多个“.npy”文件作为输入输入到 Keras 编码器-解码器模型中
- c++ - if else 语句的公式输出问题。我该怎么做才能解决这个问题?