二级友谊SQL - 循环友谊问题

时间:2015-10-07 01:26:53

标签: sql

我试图从一个表(tbl)找到2级友谊,有2列(用户朋友)

我可以列出所有拥有二级友谊的朋友,但如果我需要排除那些第一学位,我会遇到循环友谊问题

离。

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

Cate | Narwhal

Narwhal | Doge

(以及更多条目)

通过设置JOIN在同一张桌子上使用t1.friend = t2.user,我可以找到通过中间人连接的每个三人组,但在这个循环友谊示例中,我无法找到方法消除这一点。如果我有

Doge | Cate | Narwhal

Cate | Narwhal | Doge

Narwhal | Doge | Cate

作为我的推荐结果,如何过滤掉这个循环友谊并排除它?

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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