You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL自连接获取好友的好友并排除直接好友

解决好友的好友(FOF)排除直接好友的问题

先明确你的场景,咱们先回顾一下你的friends表数据:

NameFriend
AB
BC
DB
DC
AE
EZ

你原来的SQL查询确实能获取到所有好友的好友,但存在一个小问题:部分FOF同时也是用户的直接好友(比如D的FOF里的C,本身就是D的直接好友),需要把这类重复记录排除掉。

方法一:使用NOT EXISTS子查询过滤

这种方法通过子查询检查当前FOF是否属于用户的直接好友,只保留不存在直接好友关系的记录:

SELECT 
    a.Name as Friend,
    b.Friend as FOF 
FROM friends a 
JOIN friends b ON a.Friend = b.Name
WHERE NOT EXISTS (
    -- 检查当前用户和FOF是否存在直接好友关系
    SELECT 1 
    FROM friends c 
    WHERE c.Name = a.Name 
    AND c.Friend = b.Friend
)

方法二:使用LEFT JOIN+IS NULL过滤

通过左连接直接好友表,过滤掉匹配到的直接好友记录,剩下的就是纯FOF:

SELECT 
    a.Name as Friend,
    b.Friend as FOF 
FROM friends a 
JOIN friends b ON a.Friend = b.Name
-- 左连接到直接好友关系表
LEFT JOIN friends c ON c.Name = a.Name AND c.Friend = b.Friend
-- 只保留没有直接好友关系的FOF记录
WHERE c.Name IS NULL

最终结果说明

执行上述任意一个查询后,结果会自动排除既是直接好友又是FOF的记录,得到符合需求的列表:

FriendFOF
AC
AZ

这样就得到了纯好友的好友列表啦!

内容的提问来源于stack exchange,提问作者sql_learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:16:31