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

SQL如何查询匹配正反顺序ID对的唯一好友关系单行记录

无序ID匹配唯一好友关系的SQL实现

问题根因

你之前写的SQL无法返回正确结果,有两个核心问题:

  • 字段名和实际表结构不匹配:friends表的好友字段为id_one(好友发起方)、id_two(好友接收方),你写的friend_one_id、friend_two_id和实际表字段不一致
  • 条件逻辑错误:(id_one=? OR id_two=?) AND (id_one=? OR id_two=?)的写法会匹配到任意一个ID出现在好友位的所有记录,无法精准锁定两个ID刚好组成好友对的记录,甚至会查出单个ID对应的其他无关好友关系。

正确写法

因为表中好友对是全局唯一的,只需要覆盖两个ID的两种排列组合作为匹配条件即可,不会返回重复记录。

写法1:通用兼容写法

所有支持SQL标准的数据库都可以用这个写法:

SELECT * FROM friends
WHERE
  (id_one = ? AND id_two = ?)
  OR
  (id_one = ? AND id_two = ?);

参数绑定顺序:四个占位符按顺序传入「待查ID1、待查ID2、待查ID2、待查ID1」即可。
以你给出的示例为例,待查ID是10987633和01223995,参数依次传入"10987633", "01223995", "01223995", "10987633",就会精准返回id_one=01223995, id_two=10987633的目标记录。

写法2:简洁元组匹配写法

MySQL、PostgreSQL等主流数据库都支持元组匹配,写法更简洁易读,逻辑和上面完全一致:

SELECT * FROM friends
WHERE (id_one, id_two) IN (
  (?, ?),
  (?, ?)
);

参数绑定顺序和写法1完全相同。

注意:按照你描述的业务规则,两个用户之间只会存储一条好友关系记录(不会同时存A->B和B->A两条重复数据),上面的写法永远只会返回0或1条记录,完全匹配业务需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:15:38