Как обнаружить повторяющиеся строки в таблице SQL Server? - PullRequest
36 голосов
/ 20 ноября 2008

Каков наиболее эффективный способ обнаружения дубликатов в таблице строк из 10 столбцов / 50 КБ? Я использую MSSQL 8.0

Ответы [ 5 ]

56 голосов
/ 20 ноября 2008

Чтобы показать пример того, что описывают другие:

SELECT
    Col1, -- All of the columns you want to dedupe on
    Col2, -- which is not neccesarily all of the columns
    Col3, -- in the table
    Col4,
    Col5,
    Col6,
    Col7,
    Col8,
    Col9,
    Col10
FROM
    MyTable
GROUP BY
    Col1,
    Col2,
    Col3,
    Col4,
    Col5,
    Col6,
    Col7,
    Col8,
    Col9,
    Col10
HAVING
    COUNT(*) > 1
13 голосов
/ 20 ноября 2008

Вы можете использовать group by во всех столбцах, а затем count(*)>1

7 голосов
/ 20 ноября 2008

Попробуйте это

Select * From Table
Group By [List all fields in the Table here]
Having Count(*) > 1
3 голосов
/ 21 ноября 2008

В дополнение к предоставленным предложениям я бы затем попытался предотвратить дублирование в будущем, а не пытаться найти их позже.

Это делается с использованием уникальных индексов для столбцов (или групп столбцов), которые должны быть уникальными. Помните, что данные в базе данных могут быть изменены из других мест, кроме как через конкретное приложение, над которым вы работаете, поэтому лучше определить, что в таблице и что не разрешено на уровне БД.

3 голосов
/ 20 ноября 2008

Чтобы обнаружить, просто сгруппируйте, как сказал Гуге.

select fieldA, fieldB, count(*) from table
group by fieldA, fieldB
having count(*) > 1

Если вы хотите удалить дубликаты ... псевдо ....

select distinct into a temp table
truncate original table
select temp table back into original table

С усечением вы можете столкнуться с проблемами, если у вас есть ограничения FK, так что будьте внимательны, отбрасывая ограничения и следя за тем, чтобы не потерять записи.

...