2008-11-20 6 views

ответ

47

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

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 
+0

Пригвожденный чувак .. Спасибо тонне .. – Bajji 2008-11-24 12:17:08

12

Вы можете использовать «группу,» на все столбцы, а затем COUNT (*)> 1

+2

это хорошо работает, просто не забудьте исключить синтетический ПК, если у вас есть один – 2008-11-20 20:37:19

2

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

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 ограничения, так быть умным об удалении ограничений и убедившись, вы не занимаетесь сиротой записей.

6

Попробуйте

Select * From Table 
Group By [List all fields in the Table here] 
Having Count(*) > 1 
3

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

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