J'ai une base de données d'organisations SQL Server et il existe de nombreuses lignes en double. Je veux exécuter une instruction select pour saisir tout cela et la quantité de dupes, mais aussi renvoyer les identifiants associés à chaque organisation.
Une déclaration comme:
SELECT orgName, COUNT(*) AS dupes
FROM organizations
GROUP BY orgName
HAVING (COUNT(*) > 1)
Rendra quelque chose comme
orgName | dupes
ABC Corp | 7
Foo Federation | 5
Widget Company | 2
Mais j'aimerais aussi récupérer leurs identifiants. Y a-t-il un moyen de faire ça? Peut-être comme un
orgName | dupeCount | id
ABC Corp | 1 | 34
ABC Corp | 2 | 5
...
Widget Company | 1 | 10
Widget Company | 2 | 2
La raison étant qu'il existe également une table distincte d'utilisateurs qui se lient à ces organisations, et je voudrais les unifier (par conséquent, supprimez les dupes afin que les utilisateurs se lient à la même organisation au lieu des organisations dupes). Mais je voudrais une partie manuellement pour ne rien gâcher, mais j'aurais toujours besoin d'une déclaration renvoyant les identifiants de toutes les organisations dupes afin de pouvoir parcourir la liste des utilisateurs.
la source
isnull()
pour les colonnes annulables sur laon
sectionVous pouvez exécuter la requête suivante et rechercher les doublons avec
max(id)
et supprimer ces lignes.Mais vous devrez exécuter cette requête plusieurs fois.
la source
MAX( COUNT(*) ) - 1
fois, ce qui pourrait toujours être faisable.Vous pouvez le faire comme ceci:
Si vous souhaitez renvoyer uniquement les enregistrements qui peuvent être supprimés (en laissant un de chacun), vous pouvez utiliser:
Modifier: SQL Server 2000 n'a pas la fonction ROW_NUMBER (). Au lieu de cela, vous pouvez utiliser:
la source
La solution marquée comme correcte n'a pas fonctionné pour moi, mais j'ai trouvé cette réponse qui fonctionnait très bien: obtenir la liste des lignes en double dans MySql
la source
n1.id > n2.id
empêchera chaque paire de s'afficher deux fois.Vous pouvez l'essayer, c'est mieux pour vous
la source
Si vous souhaitez supprimer les doublons:
la source
Pour trouver un enregistrement en double 1) Utilisation de CTE
2) En utilisant GroupBy
la source
Ainsi, les enregistrements avec rowum> 1 seront les enregistrements en double dans votre table. «Partitionner par» le premier groupe par les enregistrements, puis les sérialiser en leur donnant des numéros de série. Donc rownum> 1 sera les enregistrements en double qui pourraient être supprimés en tant que tels.
la source
Src: https://stackoverflow.com/a/59242/1465252
la source
la source
la source
Vous avez plusieurs façons de sélectionner
duplicate rows
.pour mes solutions, considérons d'abord ce tableau par exemple
Première solution:
Seconde solution: utiliser le
identity
champet à la fin de toute solution, utilisez cette commande
la source
Je pense que je sais ce dont vous avez besoin, j'avais besoin de mélanger les réponses et je pense avoir la solution qu'il voulait:
avoir l'id max vous donnera l'id du dublic et celui de l'original qui est ce qu'il a demandé:
seule triste chose que vous obtenez sous cette forme
j'espère que ça aide encore
la source
Supposons que nous ayons un tableau "Student" avec 2 colonnes:
student_id int
student_name varchar
Maintenant, nous voulons voir les enregistrements en double Utilisez cette requête:
la source
J'ai une meilleure option pour obtenir les enregistrements en double dans une table
Le résultat de la requête ci-dessus montre tous les noms en double avec des identifiants d'étudiant uniques et le nombre de répétitions
Cliquez ici pour voir le résultat du sql
la source
la source
J'utilise deux méthodes pour trouver des lignes en double. La 1ère méthode est la plus célèbre utilisant le groupe par et en ayant. La deuxième méthode utilise CTE - Common Table Expression .
Comme mentionné par @RedFilter, cette manière est également correcte. Plusieurs fois, je trouve que la méthode CTE est également utile pour moi.
Dans l'exemple ci-dessus, nous avons collecté le résultat en trouvant l'occurrence de répétition à l'aide de ROW_NUMBER et PARTITION BY. Ensuite, nous avons appliqué la clause where pour sélectionner uniquement les lignes dont le nombre de répétitions est supérieur à 1. Tout le résultat est collecté dans la table CTE et joint à la table Organisations.
Source: CodoBee
la source
Essayer
la source