dość późnym ale Najprostsze rozwiązanie może być następujący załóżmy, że posiada stół emp_dept (EmpID, deptid), który ma powtarzające się wierszy, Mam tu stosowane @Count jak varibale .. np 2 powielony pozwolono następnie @count = 2 Na bazie danych 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)
na serwerze SQL lub anydatabase która nie obsługuje wiersz id trochę funkcji, musimy dodać kolumnę tożsamości tylko do identyfikacji każdego wiersza. powiedzieć dodaliśmy nid jako tożsamości do stołu
alter table emp_dept add nid int identity(1,1) -- to add identity column
teraz zapytanie do usuwania zduplikowanych można zapisać jako
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)
Tutaj koncepcja jest usunąć wszystkie wiersze, dla których istnieje inne wiersze, które mają podobne podstawowe wartości, ale n lub większa liczba mniejszych wierszy lub tożsamości. Dlatego też, jeśli istnieją zduplikowane wiersze, to jeden, który ma wyższy identyfikator wiersza lub tożsamość zostanie usunięty. a dla wiersza nie ma duplikatu, nie udaje mu się znaleźć id w dolnym wierszu, więc nie zostanie usunięty.
gdy istnieje 5 duplikaty, chcesz tylko jeden po usunięciu, czy trzy? – Stobor