对于每个学生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?
答案 0 :(得分:1)
我们需要找到所有元组,以满足以下条件:
完成此任务的查询将是这样的:
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。
希望有所帮助,