【问题标题】:MySQL Locate Duplicate RecordsMySQL 查找重复记录
【发布时间】:2014-03-18 19:04:42
【问题描述】:

我正在尝试查找表中在多个字段中具有重复数据的所有记录,并返回这些重复记录的所有字段。我在这个网站上研究了这个问题并发现了类似的问题,但似乎没有一个能解决我的特定问题。

例如,这些将是重复记录:

名字姓氏状态
加利福尼亚州鲍勃·琼斯
加利福尼亚州鲍勃·琼斯

虽然这些不是:

名字姓氏状态
加利福尼亚州鲍勃·琼斯
鲍勃·琼斯公司

也不是这些:

名字姓氏状态
加利福尼亚州鲍勃·琼斯
加利福尼亚州鲍勃·史密斯

也不是这些:

名字姓氏状态
加利福尼亚州鲍勃·琼斯
加利福尼亚州吉姆琼斯

如果我显示我尝试过的 MySQL 语句可能会更容易:

SELECT * 
FROM table_1 
WHERE 
    gy >= 2 AND arc = '' AND   
    first_name IN (
        SELECT first_name FROM table_1 
        GROUP BY first_name HAVING count(first_name) >1
    ) AND   
    last_name IN (
        SELECT last_name FROM table_1 
        GROUP BY last_name HAVING count(last_name) >1
    ) AND  
    state IN (
        SELECT state FROM table_1 
        GROUP BY state HAVING count(state) >1
    )

这个语句似乎返回了表中满足前两个条件(gy >= 2 AND arc = '')的每条记录,并忽略了最后三个,我不明白。

有没有人推荐一种更成功的方法来返回在所有三个 first_name、last_name 和 state 字段中具有重复值的所有记录的所有字段?

【问题讨论】:

    标签: mysql duplicates


    【解决方案1】:

    你可以试试这样的:

    SELECT    First_name, Last_name, State
    FROM      Table_1
    GROUP BY  First_name, Last_name, State
    HAVING    COUNT(1) > 1
    

    这只会返回所有三个字段的重复项。这就是你要找的吗?

    编辑:

    要获取重复的每条记录,可以使用上面的作为选择重复的子查询:

    SELECT  *
    FROM    dbo.SO2 a
    WHERE   EXISTS (
                SELECT    First_name, Last_name, State
                FROM      dbo.SO2 b
                GROUP BY  First_name, Last_name, State
                HAVING    COUNT(1) > 1
                            AND a.First_name = b.First_name
                            AND a.Last_name = b.Last_name
                            AND a.State = b.State)
    

    【讨论】:

    • 只返回一条重复记录,而不是全部。
    • 已编辑,希望对您有所帮助!
    • 我没有忽略您的建议。每次我在 phpMyAdmin 中尝试时,查询都需要很长时间才能完成。仍在尝试,当我有结果时会告诉你结果。感谢您的帮助!
    猜你喜欢
    • 2010-10-25
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2019-09-24
    • 2015-02-12
    • 2016-07-03
    相关资源
    最近更新 更多