bastante tarde pero la solución más simple podría ser la siguiente supongamos que tenemos mesa emp_dept (empid, deptid) que tiene filas duplicadas, Aquí he utilizado @Count como por ejemplo varibale .. 2 duplican deja entonces @count = 2 En base de datos Oracle
delete from emp_dept where @Count <= (select count(1) from emp_dept i where i.empid = emp_dept.empid and i.deptid = emp_dept.deptid and i.rowid < emp_dept.rowid)
En el servidor SQL o anydatabase que no soporta la fila ID de característica poco, tenemos que añadir la columna de identidad sólo para identificar cada fila. decir que hemos añadido nid como la identidad de la tabla
alter table emp_dept add nid int identity(1,1) -- to add identity column
ahora consulta para eliminar duplicados podría escribir como
delete from emp_dept where @@Count <= (select count(1) from emp_dept i where i.empid = emp_dept.empid and i.deptid = emp_dept.deptid and i.nid< emp_dept.nid)
Aquí el concepto es eliminar todas las filas para las que existe otras filas que tienen similares valores centrales pero n o mayor cantidad de rowid o identidad más pequeños. Por lo tanto, si existen filas duplicadas, se eliminará una que tenga una identificación de fila o identidad más alta. y para la fila no hay duplicado, falla al encontrar la identificación de la fila inferior, por lo que no se borrará.
cuando hay 5 duplicados, ¿quieres único que queda después de la eliminación, o tres? – Stobor