3

2人が友達ではない生徒Bを好きな生徒Aごとに、共通の友達Cがいるかどうかを見つけます(紹介できる人!)

私はテーブルを持っています

 Friend (ID1, ID2) 

 Likes(ID1, ID2)

友達ではない Likes から id のペアを選択する必要があります。

やりました

    SELECT L.id1 id1, L.id2 id2
 FROM likes L
 LEFT JOIN friend F ON (L.id1 = F.id1 and L.id2 = F.id2)
 WHERE F.id1 IS NULL

共通のフレンド ID を見つける方法は?

4

1 に答える 1

1

次の条件が適用されるすべてのタプルを見つける必要があります。

  1. AさんはBさんが好き
  2. AさんはCさんと友達です
  3. BさんはCさんと友達です
  4. 人 A は B と友達ではなく、B は A と友達ではありません

これを実現するクエリは次のようになります。

SELECT L.ID1 as Liker, L.ID2 as Liked, F1.ID2 as MutualFriend
FROM Likes L, Friend F1, Friend F2 
WHERE F1.ID2 = F2.ID2
AND F1.ID1 = L.ID1
AND F2.ID1 = L.ID2
AND NOT EXISTS(
    SELECT * FROM FRIEND F3
    WHERE (F3.ID1 = L.ID1 AND F3.ID2 = L.ID2)
    OR (F3.ID1 = L.ID2 AND F3.ID2 = L.ID1));

PS 私は sqlite3 でのみテストしたので、別の DBMS ではわずかな構文エラーがあるかもしれませんが、そうではないと思います。また、私の回答は、相互の友人 ID よりも少し読みやすい回答を返します。

それが役立つことを願って、

于 2013-01-19T23:30:20.623 に答える