-1

問題の仕様とデータベースの状態:データベースには3つのテーブル(HighschoolerFriendLikes)があり、データベースは次のとおりです。

Highschooler
ID  name    grade
1510    Jordan  9
1689    Gabriel 9
1381    Tiffany 9
1709    Cassandra   9
1101    Haley   10
1782    Andrew  10
1468    Kris    10
1641    Brittany    10
1247    Alexis  11
1316    Austin  11
1911    Gabriel 11
1501    Jessica 11
1304    Jordan  12
1025    John    12
1934    Kyle    12
1661    Logan   12

Likes
ID1 ID2
1689    1709
1709    1689
1782    1709
1911    1247
1247    1468
1641    1468
1316    1304
1501    1934
1934    1501
1025    1101

質問は次のとおりです。お互いが好きな生徒のペアごとに、両方の生徒の名前と成績を返します。2つの名前をアルファベット順に、各ペアを1回だけ含めます。

私の質問は:

select  H1.name,H1.grade,H2.name,H2.grade from 
(select ID1,ID2 from Likes 
where ID1 in (select ID2 from Likes) and
ID2 in (select ID1 from Likes)) as G JOIN Highschooler H1 JOIN Highschooler H2
where H1.ID=G.ID1 and H2.ID=G.ID2 order by H1.name,H2.name

私のクエリの出力は次のとおりです。

Cassandra 9   Gabriel  9
Gabriel   9  Cassandra 9
Jessica  11  Kyle   12
Kyle     12  Jessica 11

期待される出力は次のとおりです。

Cassandra 9   Gabriel  9
Jessica  11   Kyle  12

1つのペアを削除できません。SQliteでそれを行うにはどうすればよいですか?

4

1 に答える 1

3

最も簡単な方法は、最終where節を拡張して次の内容を含めることです。

where h1.name < h2.name

これにより、出力で各ペアが 2 倍になるのを防ぐことができます。

于 2013-01-30T02:59:11.603 に答える