El uso de TSQL, ni idea de si Postgres soporta tablas temporales, pero se podía seleccionar en una tabla temporal, y luego a través del bucle y borrar e insertar los resultados de nuevo en el original
-- **Disclaimer** using TSQL
-- You could select your records into a temp table with a pk
Create Table #dupes
([id] int not null identity(1,1), f1 int, f2 int, f3 int)
Insert Into #dupes (f1,f2,f3) values (1,2,3)
Insert Into #dupes (f1,f2,f3) values (1,2,3)
Insert Into #dupes (f1,f2,f3) values (1,2,3)
Insert Into #dupes (f1,f2,f3) values (2,3,4)
Insert Into #dupes (f1,f2,f3) values (4,5,6)
Insert Into #dupes (f1,f2,f3) values (4,5,6)
Insert Into #dupes (f1,f2,f3) values (4,5,6)
Insert Into #dupes (f1,f2,f3) values (7,8,9)
Select f1,f2,f3 From #dupes
Declare @rowCount int
Declare @counter int
Set @counter = 1
Set @rowCount = (Select Count([id]) from #dupes)
while (@counter < @rowCount + 1)
Begin
Delete From #dupes
Where [Id] <>
(Select [id] From #dupes where [id][email protected])
and
(
[f1] = (Select [f1] from #dupes where [id][email protected])
and
[f2] = (Select [f2] from #dupes where [id][email protected])
and
[f3] = (Select [f3] from #dupes where [id][email protected])
)
Set @counter = @counter + 1
End
Select f1,f2,f3 From #dupes -- You could take these results and pump them back into --your original table
Drop Table #dupes
probado esto en EM SQL Server 2000. No está familiarizado con las opciones de Postgres, pero tal vez esto lo lleve en la dirección correcta.
No estoy seguro de si lo entiendo bien. Usted dice "El PK es los 3 campos" - entonces, ¿por qué tiene duplicados en la tabla como múltiples registros 1-2-3? Corrígeme si estoy equivocado. –
El PK estaba en los 3 campos, tuvimos que eliminarlos para una fusión (larga historia) ahora tenemos que volver a ponerlo. Tenemos algunos duplicados que nos gustaría quitar. –