SQL同表自连接使用计算字段返回重复配对行如何避免
解决自连接重复ID配对的方案
核心思路是通过ID的大小比较限制配对方向,确保每对ID仅返回一次结果,具体操作如下:
- 给自连接的两个表分别设置别名,比如左表叫
a、右表叫b,在连接条件或者WHERE子句中加入a.id < b.id的约束。这个约束同时实现两个效果:一是过滤了行自身和自身连接的无效结果,二是直接排除了ID反向的重复配对(只会保留ID小的在前、大的在后的唯一组合)。
示例SQL代码
SELECT a.id AS idClient1, b.id AS idClient2, a.quantity AS quantity1, b.quantity AS quantity2, a.quantity + b.quantity AS sum FROM 你的表名 a INNER JOIN 你的表名 b ON a.id < b.id
运行效果
针对你提供的示例数据,执行上述SQL后只会返回6条无重复的有效结果,不会出现idClient1=2、idClient2=1这类反向重复行:
idClient1 idClient2 quantity1 quantity2 sum 1 2 2 6 8 1 3 2 4 6 1 4 2 3 5 2 3 6 4 10 2 4 6 3 9 3 4 4 3 7
如果你的业务场景需要包含行自身和自身求和的结果,把约束条件改为a.id <= b.id即可。
内容的提问来源于stack exchange,提问作者DannyV
相关产品推荐
相关产品推荐

