sql - 相互喜欢的 SQL
问题描述
match
---
id person_1_id persona_2_id liked
9 1 2 true
10 1 3 false
11 2 1 true
12 2 3 true
13 3 1 false
14 3 2 false
person_1_id
是person_2_id
喜欢的人,也是被喜欢的人。
我将如何查询相互喜欢的内容person id = 1
?意思是person_1_id = 1
喜欢person_2_id
并persona_2_id
喜欢他们。预期结果将是包含person_id = 2
.
解决方案
使用自加入:
SELECT DISTINCT t1.person_1_id, t1.person_2_id
FROM mytable t1
INNER JOIN mytable t2
ON t1.person_1_id = t2.person_2_id
AND t1.person_2_id = t2.person_1_id
AND t2.liked = true
WHERE t1.liked = true;
或具有EXISTS
条件的相关子查询:
SELECT DISTINCT t1.person_1_id, t1.person_2_id
FROM mytable t1
WHERE
EXISTS (
SELECT 1
FROM mytable t2
WHERE
t1.person_1_id = t2.person_2_id
AND t1.person_2_id = t2.person_1_id
AND t2.liked = true
)
AND t1.liked = true;
推荐阅读
- github - 更改用户名后的回购页面
- html - 在 html 中禁用/启用特定的 div id(类)
- r - 在 Rcpp 中检查向量的 Null 和 NA
- python - 根据来自其他模型的另一个值在模型字段中设置一个值
- java - 使用带字符的 HashMap 时需要标识符
- python - 输入的排列并在循环中运行外部程序
- python - Django 表单未按正确顺序显示字段
- python - 如何使用python在outlook中获取倒数第二个电子邮件?
- java - 加载小型 csv 文件后 Java 中的内存大小爆炸
- windows - 无法使用 Powershell 在 Windows 10 上将 Bcrypt.Net-Next 程序集安装到 GAC