2012-12-07 67 views
3

對於每個學生誰喜歡一個學生B,其中兩個是不是朋友,發現如果他們有一個共同的朋友C(誰可以介紹他們!)SQLite。獲得價值綁定到不同的列

我已經表

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

這是一個功課嗎? –

+0

我認爲你的朋友表錯了。它不應該是ID1和ID2嗎? – N1tr0

+0

是的,你說得對。我已經固定好朋友。 –

回答

1

我們需要找到的所有元組使得下列條件:

  1. 某甲喜歡某乙
  2. A被朋友人物C
  3. 某乙是朋友與人物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更可讀的答案。

希望有幫助,