我有一张桌子,上面有一个特定的人的id和他喜欢的人的身份。
喜欢
(p1,p2)
id1,id2
id2,id1
id3,id4
id3 id5
预期产出
id1,id2
我必须删除重复项,也意味着id1,id2要返回一次。
这是一个运动问题。
select hh.id, hh.name, hh.grade as gr
, hh.id2, kk.name, kk.grade as gr1
from ( select id, id2, grade, name
from highschooler ab
, Likes cd
where ab.id = cd.id1 ) hh
, highschooler kk
where hh.id2 = kk.id
此查询返回类似
的内容学生ID,学生姓名,学生成绩,朋友学生喜欢,朋友姓名,朋友等级
答案 0 :(得分:4)
这应该自己加入:
SELECT p.p1, p.p2
FROM Likes p
INNER JOIN Likes p2 ON
p.p1=p2.p2 AND
p.p2=p2.p1 AND
p.p1<p2.p1
答案 1 :(得分:0)
我认为最好的方法是使用group by
。在SQL Server中,这需要使用case
语句:
with l as (
select (case when p1 < p2 then p1 else p2 end) as pfirst,
(case when p1 < p2 then p2 else p1 end) as psecond
from likes
)
select pfirst, psecond
from l
group by pfirst, psecond
having count(*) = 2
如果原始数据中有重复项,则having子句应为:
having count(distinct p1) = 2