You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中查找三列值均相同的重复数据行

如何在MySQL中查找多列组合的重复值

嘿,我来帮你搞定这个需求!要找出数据表中name、father_name、dob这三列值完全相同的重复记录,用MySQL的分组和筛选就能轻松实现,下面分两步给你说明:

第一步:先定位重复的三列组合

如果你想先看看哪些三列组合存在重复,以及它们重复了多少次,可以用下面的SQL语句:

SELECT name, father_name, dob, COUNT(*) AS duplicate_count
FROM your_table_name
GROUP BY name, father_name, dob
HAVING COUNT(*) > 1;

这段代码的逻辑很简单:

  • 用GROUP BY把name、father_name、dob这三列作为分组依据,把值完全相同的行归为一组
  • COUNT(*)统计每组包含的行数,别名duplicate_count方便你看重复次数
  • HAVING COUNT(*) > 1筛选出那些行数大于1的组,也就是存在重复的组合

第二步:获取所有重复组合的完整记录

如果需要把这些重复组合对应的所有完整行(包括id、region等其他字段)都列出来,和你示例里的效果一致,推荐用下面两种方法:

方法一:使用子查询+IN子句

这种写法比较直观,容易理解:

SELECT *
FROM your_table_name
WHERE (name, father_name, dob) IN (
    SELECT name, father_name, dob
    FROM your_table_name
    GROUP BY name, father_name, dob
    HAVING COUNT(*) > 1
)
ORDER BY name, father_name, dob;

子查询先找出所有重复的三列组合,外层查询再把包含这些组合的所有行都查出来,最后用ORDER BY把相同组合的行排在一起,方便查看。

方法二:使用JOIN(大数据量更高效)

如果你的表数据量比较大,JOIN的方式通常比子查询更高效:

SELECT t1.*
FROM your_table_name t1
JOIN (
    SELECT name, father_name, dob
    FROM your_table_name
    GROUP BY name, father_name, dob
    HAVING COUNT(*) > 1
) t2 ON t1.name = t2.name 
    AND t1.father_name = t2.father_name 
    AND t1.dob = t2.dob
ORDER BY t1.name, t1.father_name, t1.dob;

这里先通过子查询生成一个包含重复组合的临时表t2,然后把原表t1和t2通过三列关联,就能筛选出所有重复的完整记录。

⚠️ 别忘了把代码里的your_table_name替换成你实际使用的表名哦!

内容的提问来源于stack exchange,提问作者Dean Ambrose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:49:27