用于相互相似的SQL
用于相互相似的SQL,sql,postgresql,Sql,Postgresql,person\u 1\u id是喜欢的,而person\u 2\u id是被喜欢的 如何查询个人id=1的共同喜好?意思是说person\u 1\u id=1喜欢person\u 2\u id和persona\u 2\u id喜欢他们回来。预期结果将是一行,其中包含person\u id=2使用自联接: match --- id person_1_id persona_2_id liked 9 1 2 true 10 1 3
person\u 1\u id
是喜欢的,而person\u 2\u id
是被喜欢的
如何查询个人id=1
的共同喜好?意思是说person\u 1\u id=1
喜欢person\u 2\u id
和persona\u 2\u id
喜欢他们回来。预期结果将是一行,其中包含person\u id=2
使用自联接:
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
或者存在具有条件的相关子查询
:
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;
如果您只想查询person_1_id=1,那么只需将
和t1.person_1_id=1
添加到末尾此查询将为您提供所需的结果。它查找person\u id
1喜欢的任何人,这些人也同样喜欢他们:
SELECT DISTINCT t1.person_1_id, t1.person_2_id
from tbl t1
where exists (select null from tbl 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;
输出:
SELECT persona_2_id
FROM match m
WHERE person_1_id = 1 AND
liked = true AND
EXISTS (SELECT *
FROM match m1
WHERE m1.person_1_id = m.persona_2_id AND
m1.persona_2_id = m.person_1_id AND
m1.liked = true)
persona_2_id
2