我需要SQL查询的帮助
我有这张桌子
likes
friend friend2
1 2
2 1
3 1
4 5
我只需要选择一对喜欢彼此的朋友。
根据我的当前选择我获得此
id name id name
1709 Cassandra 1689 Gabriel
1689 Gabriel 1709 Cassandra
1501 Jessica 1934 Kyle
1934 Kyle 1501 Jessica
但预期的查询结果是:
id name id name
1709 Cassandra 1689 Gabriel
1501 Jessica 1934 Kyle
答案 0 :(得分:1)
如果您确定每对都在数据库中输入两次(一次为A,B,又为B,A),那么您可以使用:
SELECT friend, friend2
FROM yourtable
WHERE friend < friend2
如果可能有一些只输入一次,那么你可以使用它:
SELECT DISTINCT
LEAST(friend, friend2) AS friend,
GREATEST(friend, friend2) AS friend2
FROM yourtable
答案 1 :(得分:1)
尝试这样的事情:
select *
from
(
select
case
when id1 > id2 then id2
when id1 < id2 then id1
end as Friend1,
case
when id1 < id2 then id2
when id1 > id2 then id1
end as Friend2
from TestMatching
) a
group by Friend1, Friend2
这里做的是它使用子查询,子查询只是几个CASE
块来订购友谊。然后它通过创建友谊摘要进行分组。如果你想看看朋友们有什么方式,那么你会做这样的事情:
select *
from
(
select
case
when id1 > id2 then id2
when id1 < id2 then id1
end as Friend1,
case
when id1 < id2 then id2
when id1 > id2 then id1
end as Friend2
from TestMatching
) a
group by Friend1, Friend2
having COUNT(*) > 1 -- this is the added clause to get consenting friends
结果查询是所有互相朋友的朋友。