2015-10-07 103 views
0

我試圖找到一個表(TBL)2列第二友好度(用戶|朋友)二度友誼SQL - 圓形友誼問題

我可以列出所有有第二度的朋友們友誼,但如果我需要排除那些第一學位,我碰到了循環友誼問題

前。

user | friend 
------------- 
Doge | Cate 

Cate | Narwhal 

Narwhal | Doge 

(還有更多的條目)

在同一個表使用JOIN通過設置t1.friend = t2.user,我可以發現,通過中間人連接每三人,但在這個圓形的友誼來說,我可以」找到一種方法來消除這一點。如果我有

Doge | Cate | Narwhal

Cate | Narwhal | Doge

Narwhal | Doge | Cate

爲我的稱道的結果,如何篩選出這個圓形的友誼和排除呢?

回答

1

檢查,如果這是你正在尋找:

DECLARE @TABLE TABLE 
(
[user] VARCHAR(50), 
Friend VARCHAR(50) 
) 

INSERT INTO @TABLE ([user], friend) 
VALUES ('Doge', 'Cate') 

INSERT INTO @TABLE ([user], friend) 
VALUES ('Cate', 'Narwhal') 

INSERT INTO @TABLE ([user], friend) 
VALUES ('Narwhal', 'Doge') 

SELECT u.[user], f.Friend, ff.* 
FROM @TABLE u 
    INNER JOIN @TABLE f   ON U.Friend = f.[user] 
    LEFT OUTER JOIN @TABLE ff ON u.[user] = ff.Friend 
           AND f.Friend = ff.[user] 
WHERE ff.[user] IS NULL 
+1

它不完全,但我想通了什麼,我從你的答覆丟失。看來我一直只處理2張表格,爲了檢查循環友誼的存在,我需要3個表格。第二個「JOIN」解決了這個問題 – JChao

1
SELECT 
    [SecondFriend].user 
FROM tbl [self] 
INNER JOIN tbl [FirstFriend] ON [FirstFriend].user=[self].friend 
INNER JOIN tbl [SecondFriend] ON [SecondFriend].user=[FirstFriend].friend 
    AND [SecondFriend].user <> [self].friend 
WHERE [self].user='Doge'