1
クエリを作成しようとしています。要件は、2人のユーザー間で相互の友人の数を取得することです。これは、パラメータとして渡された単一のユーザーIDに対して行う必要があります。ただし、結果は再帰的になります。それは木のようになります。次の表の構造は、あなたの要求であるかについての考えを与える:1は友人ではない、あなたが見ることができるように相互の友人のSQLサーバーの数
PersonID FriendID MutualFriend
3 2 1
3 2 4
3 4 1
3 4 2
:
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
上記の次の出力を与えるサンプルクエリですまだ3のリストにあります。クエリの望ましい出力は次のとおりです。
PersonID FriendID MutualFriend
3 2 4
3 4 2
誰かがこのクエリで私を助けることができますか?私は、2人の間にお互いの友人の数が好きであることをお勧めします。
良い1人の愛します。それを保つ。 – Developer
このクエリは私に間違った答えを与えています。ただ、4を選択 3,4 UNIONを選択 UNION 3、2 UNIONを選択 3、2を選択 UNION 2、1 UNIONを選択 4、UNIONは、1を選択 2、@Friendship 1を選択 インサートに挿入値を変更する1 UNION SELECT 4、2 UNION SELECT 4、3および結果が壊れています。 1は3&4の友人ではありませんが、まだリストにあります。 – User2682