#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