SQL查询重复数据时如何排除反向匹配结果?
解决SQL重复数据匹配中的反向结果问题
要避免出现双向匹配的重复结果,只需要在连接条件里把ae.ID!=ae_match.ID替换成单向的ID比较,强制每对匹配只保留一次即可。
修改后的查询语句:
select ae.id, ae_match.ID matched_ID from account_email ae join account_email ae_match on ae.email=ae_match.email and ae.ID < ae_match.ID
原理说明
通过限定ae.ID < ae_match.ID,每一组拥有相同邮箱的ID对,只会按照ID从小到大的顺序出现一次。比如示例中的001: Geoff和999: Geoff,只会返回001对应999的结果,不会再出现反向的999对应001。如果你的ID是字符串类型(如示例中的带前导零的ID),只要字符串的排序规则符合你的预期,这个逻辑同样生效。
如果需要保留ID较大的在前的配对,只需要把<改成>即可。
内容的提问来源于stack exchange,提问作者Geoff Garcia
相关产品推荐
相关产品推荐

