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

如何检查好友关系表中是否存在反向关联记录?

检查好友关系表中的反向关联记录

嘿,针对你这个检查friends表中是否存在反向关联记录的需求,我给你整理了几个实用的SQL方案,完全适配你现有的表结构:

1. 验证特定用户对是否互为好友

如果你想确认某一对用户(比如用户$user1和$user2)已经建立了双向好友关系,可以用这个自连接查询:

SELECT 1
FROM friends f1
JOIN friends f2 
  ON f1.user_id = f2.friend_user_id 
  AND f1.friend_user_id = f2.user_id
WHERE f1.user_id = $user1 
  AND f1.friend_user_id = $user2;

如果查询返回结果,说明这对用户的双向记录已经存在;要是没返回,要么只有单向好友请求,要么还没建立任何关联。

或者用更轻量的EXISTS子查询,性能更优(尤其是表数据较多时),直接返回布尔结果:

SELECT EXISTS (
  SELECT 1
  FROM friends
  WHERE user_id = $user2 
    AND friend_user_id = $user1
) AS has_reverse_record;

这个查询会直接给你true(存在反向记录)或false(不存在)的明确结果。

2. 找出所有双向好友组合

如果你想一次性查出表中所有已经互为好友的用户对,同时避免重复返回(A,B)和(B,A)这类重复数据,可以用这个查询:

SELECT DISTINCT 
  LEAST(f1.user_id, f1.friend_user_id) AS user_a,
  GREATEST(f1.user_id, f1.friend_user_id) AS user_b
FROM friends f1
JOIN friends f2 
  ON f1.user_id = f2.friend_user_id 
  AND f1.friend_user_id = f2.user_id
WHERE f1.user_id < f1.friend_user_id;

这里用LEAST和GREATEST把每对用户统一成「小ID在前,大ID在后」的格式,确保同一组好友只展示一次。

额外提醒

  • 你表中的UNIQUE (user_id,friend_user_id)约束非常重要,它能防止重复插入同一方向的好友请求(比如重复发起(A,B)),保证数据的唯一性。
  • 在处理好友接受逻辑时,建议用事务包裹插入反向记录的操作,确保操作的原子性,避免出现只插入了单向记录的异常情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:44:17