如何获取聊天表中基于反向匹配ID的唯一列对?
问题描述
原始聊天记录表:
| sender_id | receiver_id |
|---|---|
| 1 | 2 |
| 1 | 2 |
| 2 | 1 |
需求:将(sender_id, receiver_id)和(receiver_id, sender_id)视为同一对话组合,获取去重后的唯一列表,最终期望结果:
| sender_id | receiver_id |
|---|---|
| 1 | 2 |
解决方案
以下是两种通用的SQL实现方式:
方法一:使用LEAST和GREATEST函数(适配MySQL、PostgreSQL等主流数据库)
SELECT DISTINCT LEAST(sender_id, receiver_id) AS sender_id, GREATEST(sender_id, receiver_id) AS receiver_id FROM chat_table;
方法二:使用CASE语句(兼容更多数据库类型)
SELECT DISTINCT CASE WHEN sender_id < receiver_id THEN sender_id ELSE receiver_id END AS sender_id, CASE WHEN sender_id < receiver_id THEN receiver_id ELSE sender_id END AS receiver_id FROM chat_table;
逻辑说明
- 通过
LEAST/CASE将两个ID按大小排序,把(1,2)和(2,1)统一转换为(1,2)格式 DISTINCT关键字用于去除重复的组合,确保最终结果唯一
内容的提问来源于stack exchange,提问作者Kittu_kix
相关产品推荐
相关产品推荐

