MySQL找到重复记录

时间:2014-02-18 19:40:55

标签: mysql duplicates

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

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

  

first_name last_name状态
  Bob Jones CA
  Bob Jones CA

虽然这些不是:

  

first_name last_name状态
  Bob Jones CA
  Bob Jones CO

这些也不是:

  

first_name last_name状态
  Bob Jones CA
  Bob Smith CA

这些也不是:

  

first_name last_name状态
  Bob Jones CA
  Jim Jones CA

如果我展示我尝试过的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字段中具有重复值的记录的所有字段?

1 个答案:

答案 0 :(得分: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)