SQLite的。获取绑定到不同列的值

时间:2012-12-07 14:53:31

标签: sql

对于每个学生A喜欢学生B,两个人不是朋友,找出他们是否有共同的朋友C(谁可以介绍他们!)

我有桌子

 Friend (ID1, ID2) 

 Likes(ID1, ID2)

我需要从没有朋友的喜欢中选择一对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?

1 个答案:

答案 0 :(得分:1)

我们需要找到所有元组,以满足以下条件:

  1. A人喜欢B
  2. A人是C人的朋友
  3. B人是C人的朋友
  4. A人不是B的朋友,B不是A
  5. 的朋友

    完成此任务的查询将是这样的:

    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。

    希望有所帮助,