查询找到相互喜欢?
问题描述:
我有一张桌子,里面有一个特定的人的ID和他喜欢的人的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
该查询返回这样的事情
学生证,学生姓名,学生成绩,朋友学生喜欢,朋友的名字,朋友级
答
这应该这样做加盟本身:
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
+0
+1,很好的答案。 – 2013-02-23 15:33:26
答
我认为最好的方法是使用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
什么[RDBMS(HTTP:// EN .wikipedia.org/wiki/Relational_database_management_system)您正在使用? 'SQL Server'? 'MySQL'? 'Oracle'? 'DB2'?等等。 – 2013-02-23 15:19:17
@JW。你去那里 – Dude 2013-02-23 15:20:43
显示你写的代码到目前为止尝试解决问题。 – kemiller2002 2013-02-23 15:21:37