MySQL如何实现同col1分组下col2值横向展开且无重复结果
问题原因
- 现有SQL返回双向重复配对的核心逻辑问题是:
where t1.col2 <> t2.col2仅过滤了两表col2值相同的匹配项,会同时保留(a,b)和(b,a)两类符合不等于条件的配对,最终产生重复的两行结果。
解决方案
方案1:在现有SQL基础上修改过滤条件
新增大小比较规则,强制只保留col2值更小的作为第二列、更大的作为第三列,即可过滤反向配对的冗余数据:
select t1.col1, t1.col2 as col2, t2.col2 as col3 from my_table t1 inner join my_table t2 on t1.col1 = t2.col1 where t1.col2 < t2.col2;
注:这里把left join改成inner join更合理,因为你需要的是左右表都匹配到的有效配对
方案2:分组聚合写法(更适合每个col1固定对应2个col2的场景)
如果业务场景中每个col1下固定只有2个不同的col2值,可以直接用分组取最值的方式实现,逻辑更简洁,不会产生中间重复数据:
select col1, min(col2) as col2, max(col2) as col3 from my_table group by col1;
内容的提问来源于stack exchange,提问作者harp1814
相关产品推荐
相关产品推荐

