SQL Server 2008: supprimer les doublons de lignes
J'ai des doublons de lignes dans ma table, comment puis-je supprimer basé sur une seule valeur de la colonne?
Par exemple
uniqueid, col2, col3 ...
1, john, simpson
2, sally, roberts
1, johnny, simpson
delete any duplicate uniqueIds
to get
1, John, Simpson
2, Sally, Roberts
Qui voulez-vous garder? johnny ou jean?
Je n'ai pas l'esprit que je garde.
Je n'ai pas l'esprit que je garde.
OriginalL'auteur Fearghal | 2013-08-15
Vous devez vous connecter pour publier un commentaire.
Vous pouvez
DELETE
à partir d'un cce:La
ROW_NUMBER()
fonction attribue un numéro à chaque ligne.PARTITION BY
est utilisé pour démarrer la numérotation pour chaque élément de ce groupe, dans ce cas, chaque valeur deuniqueid
va commencer la numérotation à 1 et aller à partir de là.ORDER BY
détermine l'ordre dans lequel les numéros aller dans. Depuis chaqueuniqueid
obtient numérotées à partir de 1, aucun enregistrement avec uneROW_NUMBER()
supérieure à 1 a un doubleuniqueid
Afin d'obtenir une compréhension de la façon dont le
ROW_NUMBER()
fonctionne, il suffit de l'essayer:Vous pouvez ajuster la logique de la
ROW_NUMBER()
fonction pour régler l'enregistrement que vous allez conserver ou supprimer.Par exemple, vous souhaitez peut-être le faire en plusieurs étapes, d'abord la suppression d'enregistrements avec le même nom de famille mais différents prénoms, vous pouvez ajouter le nom de la
PARTITION BY
:Pouvez-vous expliquer ce que 'SELECT *,ROW_NUMBER() OVER(PARTITION BY ID, COMMANDE PAR col2)'RowRank'FROM Table"?
Une chose est sûre, la mise à jour de la réponse à inclure une description de
ROW_NUMBER()
Par Id entendez-vous UniqueId - PARTITION PAR ID. Aussi pourquoi Orderby Col2 - je m'en fout si col2 est de répliquer, je veux supprimer les doublons d'id unique sans se soucier de ce qui est laissé derrière
Ouais, ID = id unique dans votre cas. Le
ORDER BY
pourrait tout aussi bien êtreORDER BY (SELECT 1)
pour faire place à l'arbitraire. Encore une fois, laPARTITION BY
définit le champ qui sera numéroté de 1 à n, laORDER BY
est nécessaire dans laROW_NUMBER()
fonction, donc en effet il détermine en double est supprimé et ce qui ne l'est pas.OriginalL'auteur Hart CO
Vous avez probablement un id de ligne qui est attribué par la DB lors de l'insertion et de l'est en fait unique. Je vais appeler cette rowId dans mon exemple.
Vous pouvez supprimer les doublons par regroupement sur la chose qui est censé être unique (qu'il s'agisse d'une colonne ou plusieurs), puis vous prenez un rowId de chaque groupe, et supprimer tout le reste, en dehors de celles rowIds. Dans l'intérieur de la requête, tout dans la table aura un rowId, sauf pour les lignes en double.
Vous pouvez également utiliser MAX au lieu de MIN avec des résultats similaires.
OriginalL'auteur CowboyBebop
DELETE FROM table WHERE uniqueid='1' AND col2='john'
Ou de changement de
col2='john'
àcol2='johnny'
. Dépend de l'enregistrement que vous souhaitez supprimer.Comment avez-vous jusqu'à la fin avec les deux mêmes "uniques" Id en premier lieu?
C'est codé en dur pour l'exemple non? Je suis encore à essayer de comprendre comment je me suis retrouvé avec les dupes tbh.
OriginalL'auteur waka
OriginalL'auteur user123
Vous avez de nombreuses façons de supprimer les enregistrements en double certains d'entre eux sont en dessous de...........
Différentes manières de supprimer les enregistrements en Double
À l'aide de la fonction Row_Number() et la fonction CTE
OriginalL'auteur Ganesh Kumar
Ici est simple magie de supprimer les doublons
OriginalL'auteur Ata Ul Wadood Bhatti