在数据库中查找可能的重复项

时间:2011-07-29 18:52:43

标签: php mysql duplicates

我有一个存储多个列的数据库,我正在尝试创建有效的SQL查询,该查询将根据所选列(1个或更多)输出所有可能的重复项。

所以例如,如果我的数据库有"名称" "姓" "电话"我希望能够通过名字和姓氏找到重复的内容。我想只输出数据库中的那些超过两次,所以正确的输出将是这样的:

John, Smith, 123456789
John, Smith, 987654321
John, Smith, 098546786
Peter, Donut, 234569087
Peter, Donut, 854567896

我正在寻找一些东西,但我发现的唯一类似的事情就像是

SELECT * FROM table GROUP BY name,surname HAVING COUNT(*)>1

只输出一个重复的出现(不是全部)。任何建议,以便我不必从数据库中选择所有项目并通过PHP进行?

3 个答案:

答案 0 :(得分:1)

如果手机在重复项之间可以相同,只需在主要位置使用主键即可。

SELECT DISTINCT t.name, t.surname, t.phone FROM table t 
LEFT OUTER JOIN table t2 ON t.name = t2.name AND t.surname = t2.surname AND t.phone <> t2.phone
WHERE t2.name IS NOT NULL

答案 1 :(得分:1)

SELECT ID, Name, LastName, Phone

FROM mytable T1, mytable T2

      WHERE

        T1.name = T2.name AND     

        T1.Phone = Phone AND

        T1.LastName = T2.PLastName AND

        T1.ID < T1.ID -- only use this line to leave 1 as unique

答案 2 :(得分:0)

这样的事情会起作用吗?

SELECT *
FROM table t1
INNER JOIN
(
    SELECT name, surname
    FROM table
    GROUP BY name,surname
    HAVING COUNT(*)>1) t2
ON t1.name = t2.name AND t1.surname = t2.surname