如何编写SQL查询返回同ID重复但对应Code值不匹配的ID
解决方案
一、SQL实现方案
你可以直接用分组聚合的逻辑完成筛选,不需要写复杂的关联逻辑,最终查询语句如下:
SELECT id FROM `table` WHERE id LIKE 'ID%' GROUP BY id HAVING COUNT(DISTINCT Code) > 1
逻辑说明
- 按
id分组后,同一个ID的两条记录会被归为同一组 COUNT(DISTINCT Code)统计分组内不同Code的数量:如果两个Type对应的Code一致,统计结果为1;如果不一致,统计结果为2HAVING子句筛选出统计结果大于1的分组,也就是你需要的ID,天然去重不需要额外加DISTINCT关键字
如果你的数据量在百万级以内,这个写法的执行效率足够满足需求。
二、Excel替代方案
如果你的总数据量小于10万条,且对SQL语法不熟悉,用Excel处理确实更快,操作步骤如下:
- 导出全量的ID、Type、Code三列数据到Excel文件
- 选中所有数据,按ID列排序,让同一个ID的两条记录相邻排列
- 新增辅助列,假设ID在A列、Code在C列、第一行为表头,在第二行的辅助列单元格输入公式:
=IF(A2=A3,IF(C2<>C3,"匹配",""),""),下拉填充所有行 - 筛选辅助列值为「匹配」的行,对应A列的ID就是符合要求的结果
优势说明
不需要调试SQL语法,操作全程可视化,小数据量下总耗时远低于编写、调试SQL的时间。
内容的提问来源于stack exchange,提问作者savvarian
相关产品推荐
相关产品推荐

