Поиск возможных дубликатов в базе данных - PullRequest
1 голос
/ 29 июля 2011

У меня есть база данных, в которой хранится несколько столбцов, и я пытаюсь создать эффективный 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 ]

1 голос
/ 29 июля 2011

Если между дубликатами телефон может быть одинаковым, просто используйте свой первичный ключ вместо него в соединении.

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 голос
/ 29 июля 2011
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
0 голосов
/ 29 июля 2011

Хотелось бы что-нибудь подобное?

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
...