Поиск дубликатов в SQL

#sql #tsql

#sql #tsql

Вопрос:

У меня есть большая таблица со следующими данными о пользователях.

 social security number
name
address
  

Я хочу найти все возможные дубликаты в таблице
где ssn равен, но имя не

Моя попытка:

 SELECT * FROM Table t1
WHERE (SELECT count(*) from Table t2 where t1.name <> t2.name) > 1
  

Ответ №1:

Группировка в SSN должна это сделать

 SELECT
   ssn
FROM
   Table t1
GROUP BY
   ssn
HAVING COUNT(*) > 1
  

..или если у вас много строк в ssn и вы хотите найти только повторяющиеся имена)

 ...
HAVING COUNT(DISTINCT name) > 1 
  

Редактировать, упс, неправильно понято

 SELECT
   ssn
FROM
   Table t1
GROUP BY
   ssn
HAVING MIN(name) <> MAX(name)
  

Комментарии:

1. ваш ответ, кажется, дает мне строки, в которых имя совпадает. Я хочу строки, в которых имя НЕ равно

2. @Mark: заголовок гласит «Найти дубликаты», что ввело меня в заблуждение. Исправлено.

3. Я думал, что мне понадобятся самосоединения. Мне нравится идея min / max. Спасибо

Ответ №2:

Это позволит обрабатывать более двух записей с повторяющимися ssn:

 select count(*), name from table t1, (    
    select count(*) ssn_count, ssn 
    from table 
    group by ssn 
    having count(*) > 1
) t2
where t1.ssn = t2.ssn
group by t1.name
having count(*) <> t2.ssn_count