2010-03-08 3 views
2

У меня есть таблица в MySQL контактной информации;MySQL, возвращать только строки, где есть дубликаты между двумя столбцами

первое имя, фамилия, адрес, и т.д..

Я хотел бы выполнить запрос на этой таблице, которая будет возвращать только строки с первого и фамилиями комбинации, которые появляются в таблице более чем один раз.

Я не хочу, чтобы сгруппировать «дублирует» (который может быть только дублируют первого и последнего имени, но не другая информация, как адрес или дата рождения) -

Я хочу вернуть все «дубликат» так что я могу просмотреть результаты и определить, являются ли они обманами или нет. Казалось, что это было бы просто, но этого не было.

Каждое решение Я могу найти обе группы обманутых и дает мне только счет (что не полезно для того, что мне нужно делать с результатами) или вообще не работает.

Возможна ли такая логика в запросе? Должен ли я попытаться сделать это на Python или что-то еще?

ответ

7

Вы должны сделать это с помощью подхода GROUP BY в подзапросе.

SELECT t.first_name, t.last_name, t.address 
FROM your_table t 
JOIN (SELECT first_name, last_name 
     FROM your_table 
     GROUP BY first_name, last_name 
     HAVING COUNT(*) > 1 
    ) t2 
    ON (t.first_name = t2.first_name, t.last_name = t2.last_name) 

Суб-запрос возвращает все имена (first_name и last_name), что существует более чем один раз, и JOIN возвращает все записи, которые соответствуют эти имена.

1

Вы можете сделать это с помощью GROUP BY/HAVING и SUB SELECT. Что-то вроде

SELECT t.* 
FROM Table t INNER JOIN 
     (
      SELECT FirstName, LastName 
      FROM Table 
      GROUP BY FirstName, LastName 
      HAVING COUNT(*) > 1 
     ) Dups ON t.FirstName = Dups.FirstName 
       AND t.LastName = Dups.LastName 
1
select * from people 
join (select firstName, lastName 
    from people 
    group by firstName, lastName 
    having count(*) > 1 
) dupe 
using (firstName, lastName) 
Смежные вопросы