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

SQL中如何查询拥有完全相同好友列表的用户

实现思路

核心逻辑是先为每个用户生成唯一的好友列表标识,再匹配标识完全相同的用户即可,避免仅匹配部分共同好友的误判。

具体实现(MySQL语法为例)

  1. 第一步:聚合生成每个用户的好友列表指纹
    对每个用户的好友ID做排序后拼接,相同好友列表的用户会生成完全一致的指纹值:
SELECT 
  user_id,
  GROUP_CONCAT(friend_id ORDER BY friend_id) AS friend_fingerprint
FROM Friends
GROUP BY user_id
  1. 第二步:匹配好友列表完全一致的用户对
    自关联上述聚合结果,过滤出指纹相同、用户ID不同的配对,同时添加a.user_id < b.user_id条件避免重复返回相同配对(比如1和4、4和1只保留一组):
WITH user_friend_finger AS (
  SELECT 
    user_id,
    GROUP_CONCAT(friend_id ORDER BY friend_id) AS friend_fingerprint
  FROM Friends
  GROUP BY user_id
)
SELECT 
  a.user_id AS user1,
  b.user_id AS user2
FROM user_friend_finger a
INNER JOIN user_friend_finger b 
  ON a.friend_fingerprint = b.friend_fingerprint 
  AND a.user_id < b.user_id

执行后即可得到示例中的结果:1和4的匹配配对。如果要统计匹配的组数,直接将SELECT语句改为COUNT(*)即可。

原有代码的问题

你原来的关联逻辑只能匹配到两个用户存在共同好友的场景,无法校验两个用户的所有好友完全一致、且没有多余的其他好友的核心条件,所以需要先聚合生成统一标识再做匹配,逻辑更清晰,性能也更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:24:01