1
我想構建一個查詢。要求是獲得兩個用戶之間的共同朋友的數量。這我需要做一個單一的userId作爲參數傳遞。但結果將是遞歸的。它會像一棵樹。下面的表結構將要給大家介紹的是要求一個想法:SQL Server計數的共同朋友
DECLARE @Person TABLE
(ID INT PRIMARY KEY,
Name VARCHAR(25))
DECLARE @Friendship TABLE
(PersonID INT,
FriendID INT)
--Person table entry
INSERT @Person
SELECT 1, 'A' UNION ALL
SELECT 2, 'B' UNION ALL
SELECT 3, 'C' UNION ALL
SELECT 4, 'D'
--Person:Friend relationship entry
INSERT @Friendship
SELECT 1, 2 UNION
SELECT 1, 4 UNION
SELECT 2, 1 UNION
SELECT 2, 3 UNION
SELECT 2, 4 UNION
SELECT 3, 2 UNION
SELECT 3, 4 UNION
SELECT 4, 1 UNION
SELECT 4, 2 UNION
SELECT 4, 3
SELECT DISTINCT F1.*, F2.PersonID AS MutualFriend
FROM @Friendship AS F1
INNER JOIN @Friendship AS F2 ON F2.PersonID <> F1.PersonID AND F2.FriendID = F1.FriendID
INNER JOIN @Person AS P1 ON P1.ID = F1.PersonID
INNER JOIN @Person AS P2 ON P2.ID = F2.FriendID
JOIN @Person AS P3 ON P3.ID = F2.FriendID
WHERE F1.PersonID = 3--The person for which friends and mutual friends need to be found
ORDER BY F1.PersonID
以上是一個簡單的查詢給予以下的輸出:
PersonID FriendID MutualFriend
3 2 1
3 2 4
3 4 1
3 4 2
正如你所看到的,1是不是朋友3還在列表中。查詢的期望的輸出是:
PersonID FriendID MutualFriend
3 2 4
3 4 2
有人可以幫我在這個查詢嗎?我最好希望兩個人之間的共同朋友的數量。
好一個親愛的。收下。 – Developer
這個查詢給了我錯誤的答案。只是改變插入插入值@Friendship SELECT 1,2 UNION SELECT 1,4 UNION 選擇2,1 UNION SELECT 2,3 UNION SELECT 3,2 UNION SELECT 3,4 UNION SELECT 4,1 UNION SELECT 4,2 UNION SELECT 4,3結果中斷。 1不是3&4的共同朋友,但它在列表中。 – User2682