6
votes

Comment supprimer tous les enregistrements dupliqués de la table SQL?

Bonjour, j'ai un nom de table amisData contenant des enregistrements en double comme indiqué ci-dessous indiqué ci-dessous xxx

Je souhaite supprimer des lignes de combinaisons en double en utilisant MS SQL?
Supprimer les derniers enregistrements en double de MS SQL Friendata Table. Ici, j'ai attaché une image qui met en évidence les combinaisons de colonnes en double.

Entrez la description de l'image ici

Comment puis-je supprimer toutes les combinaisons en double de la table SQL?


0 commentaires

5 Réponses :


13
votes

Essayez ceci xxx

voir ici

ou ici est plus façons de faire ce que vous voulez

espérons que cela aide


5 commentaires

@Abhishek: Cela laisse la duplication la plus récente, non "Supprimer le dernier duplicata" que vous avez énoncé dans la question.


Ok @omg j'ai eu ton point. Si je change max () remplacé par min () dans la requête ci-dessus, il supprima les derniers enregistrements en double de la table SQL. Ai-je raison?


Bonjour @arsenmkrt, j'ai remplacé avec Max () à Min () dans votre requête, puis il supprime tous les derniers enregistrements en double. Ai-je raison?


Essayez avec rejoindre aussi :), vous pouvez essayer ma réponse, peu importe vous avez marqué cette réponse :) Cela peut être plus rapide !!


Je sais que c'est vieux mais pour le dossier, vous devez modifier le SQL pour travailler dans MySQL, car l'erreur 1093 (code d'erreur: 1093. Vous ne pouvez pas spécifier la table cible 'xxx' pour la mise à jour de la clause) The Final SQL devrait être comme: Supprimer des amisData où Fid pas dans (Sélectionnez FID de (Sélectionnez Min (FID) en tant que FID auprès des amisData Groupe par userid, amis) comme quelque chose)



1
votes

Je ne sais pas si la syntaxe est correcte pour MS-SQL, mais dans MySQL, la requête ressemblerait à: xxx

dans le groupe par Clause Vous avez mis les colonnes que vous devez être identiques afin de prendre en compte deux enregistrements en double


1 commentaires

FID n'est pas contenu dans une fonction d'agrégation ou un groupe par clause. L'énoncé SQL ci-dessus sera-t-il fonctionné comme ça?



0
votes

Essayez cette requête,

  select * from FriendsData f1, FriendsData f2
  Where f1.fID=f2.fID and f1.UserID  =f2.UserID  and f1.FriendsID  =f2.FriendsID


1 commentaires

Mais cela ne supprimera-t-il pas tous des rangées de l'ensemble dupliqué? Je pense que l'exigence est de laisser un derrière.



3
votes

Cela semble contre-intuitif, mais vous pouvez supprimer d'une expression de table commune (dans certaines circonstances). Donc, je le ferais comme si: XXX

Cela gardera l'enregistrement avec le plus bas FID. Si vous voulez autre chose, changez la clause de la commande dans la clause Over.

Si c'est une option, mettez une contrainte d'unicité sur la table afin que vous ne puissiez pas continuer à le faire. Cela n'aide pas à sauter un bateau si vous avez toujours une fuite!


2 commentaires

Merci pour une bonne réponse 1 "Ai-je raison?


Ah oui ... j'ai raté la clause de la CTE. Désolé; post original édité.



0
votes

fonctionne dans Postgres: xxx


1 commentaires

Salut et merci pour la réponse. C'est génial que cela fonctionne pour vous, mais cela nous aiderait si vous pouviez expliquer ce que vous avez fait et comment avez-vous résolu le problème initial!