如何在MySQL中查询所有重复行(关联companies与addresses表)
解决方案
要找出满足以下任一条件的重复公司记录:
- 多个公司共享同一个
phone_number - 多个公司共享完全相同的地址信息(
a1、a2、postal)
可以使用以下SQL语句实现:
WITH company_address AS ( SELECT c.uuid, c.name, c.phone_number, a.a1, a.a2, a.postal, -- 统计相同手机号的公司数量 COUNT(*) OVER (PARTITION BY c.phone_number) AS phone_dup_count, -- 统计相同地址组合的公司数量 COUNT(*) OVER (PARTITION BY a.a1, a.a2, a.postal) AS addr_dup_count FROM companies c JOIN addresses a ON c.uuid = a.parent_uuid ) SELECT uuid, name, phone_number FROM company_address WHERE phone_dup_count > 1 OR addr_dup_count > 1 ORDER BY uuid;
逻辑说明
- 关联表数据:通过
parent_uuid字段将companies和addresses表关联,获取每个公司对应的完整地址信息。 - 统计重复频次:
- 基于
phone_number分组,统计每个手机号对应的公司数量 - 基于
a1、a2、postal组合分组,统计每个地址对应的公司数量
- 基于
- 筛选重复记录:只要手机号重复数大于1,或者地址组合重复数大于1,就将该公司记录筛选出来。
结果验证
结合你的示例数据:
5esd和6dcv的地址信息完全一致,地址重复数为2,会被纳入结果56js和tug8的手机号完全一致,手机号重复数为2,会被纳入结果jkj9的手机号和地址均无重复,不会出现在结果中
最终输出结果与你预期的4行记录完全匹配。
内容的提问来源于stack exchange,提问作者issdilshod
相关产品推荐
相关产品推荐

