2008-11-20 19 views

Respuesta

47

Para mostrar un ejemplo de lo que otros han estado describiendo:

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

Clavado, amigo ... Muchas gracias .. – Bajji

12

Puede utilizar "grupo por" en todas las columnas y luego contar (*)> 1

+2

esto funciona bien, solo recuerda excluir un PK sintético si tienes uno –

2

para detectar, simplemente por grupo como dijo Guge.

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

Si desea eliminar duplicados ... seudo ....

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

Con truncado es posible que encuentre problemas si tiene limitaciones FK, por lo que ser inteligentes acerca de cómo quitar las limitaciones y asegurándose usted no huérfanos registros

6

Prueba este

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

Además de las sugerencias, que luego irían a los esfuerzos de prevención de duplicados en el futuro, en lugar de tratar de localizarlos más tarde.

Esto se hace usando índices únicos en columnas (o grupos de columnas) que se supone que son únicos. Recuerde que los datos en la base de datos se pueden modificar desde otras ubicaciones que no sean a través de la aplicación específica en la que está trabajando, por lo que es mejor definir lo que está y lo que no está permitido en una tabla en el nivel de base de datos.

Cuestiones relacionadas