assez tard, mais la solution la plus simple pourrait être comme suit supposons que nous avons la table emp_dept (empid, deptID) qui a des lignes en double, Ici, je l'ai utilisé comme @Count varibale .. par exemple 2 dupliqués permis alors @count = 2 Sur la base de données 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)
Sur le serveur SQL ou anydatabase qui ne supporte pas id ligne disposent d'un peu, nous avons besoin d'ajouter colonne d'identité juste pour identifier chaque ligne. disent que nous avons ajouté nid que l'identité de la table
alter table emp_dept add nid int identity(1,1) -- to add identity column
maintenant requête pour supprimer les doublons pourrait être écrite comme
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)
Ici, le concept est de supprimer toutes les lignes pour lesquelles il existe d'autres lignes qui ont la même valeurs de base mais n ou plus grand nombre de plus petit rowid ou identité. Par conséquent, s'il existe des lignes dupliquées, une ligne ayant une identification ou une identité de ligne supérieure sera supprimée. et pour la ligne il n'y a pas de doublon, il échouera dans la recherche de l'identifiant de la rangée inférieure, donc ne sera pas supprimé.
quand il y a 5 doublons, voulez-vous seul à gauche après la suppression, ou trois? – Stobor