我有一个名为LIKES的表如下。
正如您所看到的,它有两列。 UserName1,UserName2。 这个表包含的是,如果一个人跟随其他人的facebook页面等。
例如,如果Jon跟随bobs页面,则表格中有一个条目为Jon,bob,如果bob跟随Jon facebook页面,则会有一个名为Bob,Jon的条目。
所以我想找出所有跟随对方个人资料的用户,我希望它没有重复。
我有以下查询,该查询提供了查找关注彼此配置文件的用户的结果。但我无法删除重复
SELECT L1.USERNAME1, L2.USERNAME2
FROM LIKES L1,
LIKES L2
WHERE L1.USERNAME1=L2.USERNAME2
AND L1.USERNAME2=L2.USERNAME1
给定表的最终输出应该是Jon Bob,或Bob,Jon,而不是两者。
我的查询给出了两个结果,如何删除重新列表中的重复项
答案 0 :(得分:3)
首先,don't use comma-style joins。该语法已经过时了很长时间。其次,在这种情况下,您可以避免重复的一种方法是要求您在结果集中报告的名字按字母顺序排在第一个名称之前。您可以安全地执行此操作,因为结果集中出现的任何一对名称必须以两个顺序出现在源表中(例如(" Bob"," Jon")和(& #34; Jon"," Bob"))。我在这里假设您不需要处理跟随自己页面的用户的情况。例如:
select *
from likes L1
where
L1.username1 < L1.username2 and
exists (select 1 from likes L2 where L1.username1 = L2.username2 and L1.username2 = L2.username1);
结果:
username1 username2
Bob Jon
Click here表示使用示例数据演示此方法的SQL小提琴。
答案 1 :(得分:2)
看起来有点疯狂,但这确实有效:
select min(t.username1) as username1,
max(t.username2) as username2
from likes t
group by least(t.username1, t.username2),
greatest(t.username1, t.username2)
having count(distinct t.username1) = 2
编辑添加了having
条款来处理我对OP问题的误解