【发布时间】:2015-10-14 19:58:59
【问题描述】:
我有一个包含用户 ID 和名称的用户表。
我有一个包含 UserID1 和 UserID2 的 Likes 表。
当 User1 喜欢 User2 时,他们的 ID 会分别输入到 Likes 表中。
情景:
User1 喜欢 User2 和 User2 喜欢 User1 - 相互关系。
我想向 User1 建议与 User2 有相互关系的所有其他用户,他们也喜欢 User1,但 User1 还不喜欢他们。喜欢他们会形成三向关系。
返回 User2 和 User3 的 UserID 以及 User1 的所有其他潜在三向关系的 SQL 查询是什么
这是我目前所拥有的,但它并不能 100% 工作,因为它目前建议的用户一开始甚至不喜欢 User1
SELECT
DISTINCT a.[UserID2] as id_mylike, [user].[id] as id_theylike
FROM dbo.[likes] a
JOIN dbo.[likes] b ON a.[UserID1] = b.[UserID2]
JOIN dbo.[user] c ON a.[UserID2] = c.[id]
JOIN dbo.[user] d ON a.[UserID1] = d.[id] AND a.[UserID2] = b.[UserID1]
JOIN dbo.[user_likes] f on a.[UserID2] = f.[UserID1]
JOIN dbo.[user] [user] ON f.[UserID2] = [user].[id] AND [user].[id] IN
(
SELECT
a.[UserID1]
FROM dbo.[likes] a
LEFT JOIN dbo.[user] c ON a.[UserID1] = c.[id]
WHERE a.[UserID2] = @userID
AND a.[UserID1] NOT IN
(
SELECT a.[UserID1]
FROM dbo.[likes] a
LEFT JOIN dbo.[likes] b ON a.[UserID2] = b.[UserID1]
LEFT JOIN dbo.[user] c ON a.[UserID1] = c.[id]
JOIN dbo.[user] d ON a.[UserID2] = d.[id] AND a.[UserID1] = b.[UserID2]
WHERE a.[UserID2] = @userID
)
)
WHERE a.[UserID1] = @userID
【问题讨论】:
-
请在sqlfiddle.com 或问题本身中与我们分享一些 DDL。到目前为止,您尝试过什么?
标签: sql-server join