4

特定の人の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

このクエリは次のようなものを返します

学生ID、学生名、学生グレード、友達学生好き、友達名、友達グレード

4

2 に答える 2

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

サンプルフィドルデモ

于 2013-02-23T15:26:42.830 に答える
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
于 2013-02-23T15:51:25.827 に答える