Comment obtenir le code T-SQL pour trouver les doublons?
MS Access a un bouton pour générer le code sql pour trouver les lignes en double. Je ne sais pas si SQL Server 2005/2008 Management Studio a cette.
-
Dans l'affirmative, veuillez point où
-
Si elle n'a pas, s'il vous plaît dites-moi comment je peux avoir un T-SQL aide pour la création de ce type de code.
Vous devez vous connecter pour publier un commentaire.
Bien, si vous avez des lignes entières comme des doublons dans votre tableau, vous avez au moins pas obtenu une clé primaire mis en place pour la table, sinon, au moins la valeur de la clé primaire serait différent.
Cependant, voici comment construire un SQL pour obtenir les doublons sur un ensemble de colonnes:
Cela permettra de trouver les lignes qui, pour les colonnes col1-col4, a la même combinaison de valeurs, plus d'une fois.
Par exemple, dans le tableau suivant, les lignes 2+3 serait doublons:
Les deux lignes partagent des valeurs communes dans les colonnes col1-col4, et, par conséquent, en SQL, est considérés comme des doublons. Développez la liste des colonnes à contenir toutes les colonnes que vous souhaitez analyser ce pour.
Si vous utilisez SQL Server 2005+, vous pouvez utiliser le code suivant pour afficher toutes les lignes le long de avec d'autres colonnes:
Vous pouvez également supprimer (ou utiliser de toute autre façon) les doublons en utilisant cette technique:
ROW_NUMBER est extrêmement puissant, il ya beaucoup que vous pouvez faire avec - voir le BOL de l'article sur le http://msdn.microsoft.com/en-us/library/ms186734.aspx
J'ai trouvé cette solution quand j'ai besoin de vider des lignes entières avec un ou plusieurs des champs en double mais je ne veux pas de taper à chaque nom de champ dans la table:
Autant que je sache, il n'a pas. Il suffit de faire une instruction select regroupement de tous les champs d'une table, et du filtrage à l'aide d'une clause having où le nombre est supérieur à 1.
Si vos lignes sont dupliqués à l'exception de la touche, puis de ne pas inclure la clé dans la sélection des champs.
Une autre manière, on peut faire c'est de se joindre à une table sur elle-même.
Remarque: Le rabaisser.Pkey < aDupes.Pkey est là parce que de rejoindre une table contre elle-même, la création de deux lignes par match depuis que la condition sera toujours vraie à deux reprises.
En d'autres termes:
Si la table de rabaisser a un rang égal à une ligne de aDupes (basée sur ColA et colb ne), la réflexion de ce match sera aussi vrai que aDupes a une ligne égale à une ligne rabaisser basée sur ColA et colb ne. Par conséquent, ces deux matches seront retournées dans le jeu de résultats.
Étroites ce bas/éliminer cette réflexion arbitrairement la cueillette de tous les résultats au cas où l'un des tableaux a une touche inférieure.
< ou > n'a pas d'importance, tant que les touches sont différentes.
Cela prend également soin de filtrer les matchs avec une ligne sur lui-même, parce que rabaisser.Pkey < aDupes.Pkey forces les clés primaires être différent.