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

PieCloudDB下查找无共同好友的用户好友对SQL语句修正求助

正确SQL实现方案

原SQL的错误在于,它判断的是好友对中的某一个用户是否没有其他好友,而非两个用户是否没有共同好友。当添加(3,6)后,6的好友列表新增了3,原SQL会错误地认为(6,7)存在“其他好友”从而排除它,但实际上6和7并没有共同好友。

以下是针对需求的正确实现,利用CTE整理所有用户的好友关系,再通过子查询判断是否存在共同好友:

WITH user_friends AS (
    -- 生成所有用户与好友的双向关系,确保每个用户的所有好友都被列出
    SELECT user_id1 AS user_id, user_id2 AS friend_id FROM Friends
    UNION ALL
    SELECT user_id2 AS user_id, user_id1 AS friend_id FROM Friends
)
SELECT f.user_id1, f.user_id2
FROM Friends f
WHERE NOT EXISTS (
    -- 检查当前好友对是否存在共同好友
    SELECT 1
    FROM user_friends uf1
    JOIN user_friends uf2 ON uf1.friend_id = uf2.friend_id
    WHERE uf1.user_id = f.user_id1  -- uf1是当前好友对第一个用户的好友关系
      AND uf2.user_id = f.user_id2  -- uf2是当前好友对第二个用户的好友关系
      AND uf1.friend_id NOT IN (f.user_id1, f.user_id2)  -- 排除用户自身(避免误判)
)
ORDER BY f.user_id1, f.user_id2;

逻辑说明:

  1. CTE user_friends:将原表的单向好友记录转换为双向,确保每个用户的所有好友都能被查询到(比如原表的(3,6)会同时生成(3,6)和(6,3)两条记录)。
  2. NOT EXISTS子查询:通过连接两个用户的好友列表,查找是否存在交集(即共同好友)。如果没有交集,则该好友对符合“无共同好友”的条件。

添加(3,6)后,执行该SQL会得到预期结果:

user_id1user_id2
36
67
89

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:15:00