J'ai hérité d'une base de données SQL Server contenant des données en double. Je dois trouver et supprimer les lignes en double. Mais sans un champ d'identification, je ne suis pas sûr de savoir comment trouver les lignes.Comment trouver des doublons dans une table sans clé primaire ou champ ID?
Normalement, je le compare avec lui-même en utilisant un LEFT JOIN
et vérifie que tous les champs sont les mêmes, sauf le champ ID serait table1.id <> table2.id
, mais sans cela, je ne sais pas comment trouver des lignes en double et ne pas l'avoir aussi correspondre sur lui-même.
TABLE:
productId int not null,
categoryId int not null,
state varchar(255) not null,
dateDone DATETIME not null
DONNÉES ÉCHANTILLON
1, 3, "started", "2016-06-15 04:23:12.000"
2, 3, "started", "2016-06-15 04:21:12.000"
1, 3, "started", "2016-06-15 04:23:12.000"
1, 3, "done", "2016-06-15 04:23:12.000"
Dans cet exemple, seules les lignes 1 et 3 sont des doubles.
Comment trouver des doublons?
Vous pouvez utiliser un cte ajouter un 'row_number()' avec la partition, puis supprimez où no_lig> 1 Je travaillerai sur – Matt
exemple Pouvez-vous donner @ Matt un exemple? –
Tous là pour vous, vos données de test, sélectionnez avant et après la suppression. Une note de côté si vous êtes en mesure de modifier le schéma, vous pouvez toujours ajouter une colonne d'identité plus tard. – Matt