假设 Facebook 朋友的表如下所示 - userId | friendId
,您将如何编写 SQL 查询来查找两个朋友之间的共同朋友?我有下面的代码适用于两个朋友 A 和 B。但是,我觉得它没有得到足够的优化,我希望我可以用 join 做同样的查询。我感到困惑的两个领域:
- 特定的用户 ID 可以在任一列中,具体取决于发起好友请求的人。如果 A 向 B 发送请求,userId 将是 A,friendId 将是 B。下面的查询我已经处理了这种情况,但是你将如何对 JOIN 做同样的事情?
- FB如何推荐添加某人为朋友?在查询中会是什么样子?
Stack Overflow/互联网上有多个类似的问题,但似乎没有一个是 100% 准确的!
我正在寻找一个 MS SQL 服务器查询,但任何 SQL 语言都应该可以工作。
SELECT *
FROM (
SELECT CASE WHEN userId = 'A' THEN friendId ELSE userId END AS mutualFriends
FROM friendsTable
WHERE userId = 'A' OR friendId = 'A'
UNION
SELECT CASE WHEN userId = 'B' THEN friendId ELSE userId END AS mutualFriends
FROM friendsTable
WHERE userId = 'B' OR friendId = 'B'
) A
WHERE mututalFriends NOT IN ('A','B')