2013-07-10 41 views
0

我想設計一個包含兩個人之間的朋友關係的表,所以我設計了一個表格包含以下字段:FriendIdFriend_LFriend_R設計一個表來保存朋友關係

這意味着該人Frind_L是朋友的人Friend_R

而且這樣的設計有,我必須兩次添加的每個朋友的關係表中的一個問題不得不弄清楚誰是使用該查詢一個特定的人的朋友的能力:

SELECT Friend_R 
FROM Friends 
Where Friend_L= ANY INTEGER ; 

任何人有其他想法做到這一點,而不會重複每一個關係?

回答

1

嘗試使用其他查詢嗎?

SELECT 
    Friend_R as Friend 
FROM 
    Friends 
WHERE 
    Friend_L = :x 
UNION 
SELECT 
    Friend_L as Friend 
FROM 
    Friends 
WHERE 
    Friend_R = :x 

第一個與您的相同,但與其他查詢的UNION應返回所有替代結果。 UNION(沒有ALL)負責爲你刪除重複項。

或者,你可以使用CASE做一個,如果你真的覺得有必要...

SELECT 
CASE WHEN (Friend_L = :x) THEN Friend_R ELSE Friend_L END AS Friend 
FROM 
Friends 
WHERE 
Friend_L = :x OR Friend_R = :x 
0

您不必這樣做。假設您正在尋找與ID爲20的用戶的關係。

SELECT * 
FROM friends 
WHERE left_id = 20 or right_id = 20; 
0

您不需要將其添加兩次。只需添加一次並使用UNION

SELECT Friend_R FROM Friends Where Friend_L= ANY INTEGER 
UNION 
SELECT Friend_L FROM Friends Where Friend_R= ANY INTEGER