MySQL查询不同行中Gender、age、postcode重复值的方法求助
找出MySQL表中重复行的解决方案
嘿,这个场景太常见了——数据量小的时候手动用GROUP BY凑合用,数据一上来简直头大!给你两个高效的方案,轻松找出table1中Gender、age、postcode都重复的行:
方案1:关联子查询(兼容所有MySQL版本)
先通过子查询定位出存在重复的字段组合,再关联原表把所有重复行拉出来:
SELECT t1.* FROM table1 t1 JOIN ( -- 先找出有重复的Gender/age/postcode组合 SELECT Gender, age, postcode FROM table1 GROUP BY Gender, age, postcode HAVING COUNT(*) > 1 ) t2 ON t1.Gender = t2.Gender AND t1.age = t2.age AND t1.postcode = t2.postcode -- 按重复字段排序,方便查看同一组的重复行 ORDER BY t1.Gender, t1.age, t1.postcode;
方案2:窗口函数(MySQL 8.0及以上版本推荐)
如果你的MySQL是8.0或更新版本,用窗口函数会更简洁直观,直接给每行标记所在组的重复次数,再筛选出次数大于1的行:
SELECT * FROM ( SELECT *, -- 按三个字段分组,计算每组的行数 COUNT(*) OVER (PARTITION BY Gender, age, postcode) AS duplicate_count FROM table1 ) t WHERE duplicate_count > 1 ORDER BY Gender, age, postcode;
小提示
- 如果表有主键(比如
id字段),可以在查询结果中包含主键,能快速区分不同的重复行; - 这两个方案都能直接返回所有重复的行,不用再手动核对,数据量再大也能轻松处理~
内容的提问来源于stack exchange,提问作者Bernando Purba
相关产品推荐
相关产品推荐

