SQL pour trouver pourquoi PK canidate a des doublons sur la table unkeyed
-
10-10-2019 - |
Question
Si mon titre fait mal votre tête ... Je suis avec vous. Je ne veux pas entrer dans pourquoi ce tableau existe, sauf qu'il fait partie d'un système existant, aussi le système ne « accès au niveau record » (RLA) et cela, je sais qu'il sera un problème pour de nombreuses tables, de toute façon la RLA est mentionné parce que l'ajout d'une colonne changer le format de table et de nombreux programmes très anciens ne fonctionnent plus ...
Il semble que l'ajout d'un PK a été montré de ne pas modifier le format de la table. Donc, on m'a dit qu'un certain jeu de clés est garantie être unique, bien ce que vous savez ... ce n'est pas. Et maintenant, je dois montrer où ils ne sont pas.
Tout ce que je peux penser est:
Obtenez le produit croisé où les matches de table sur c'est la clé primaire.
D'une certaine façon obtenir une colonne de comptage sur le jeu de résultats pour le nombre d'entrées où le PK correspond elle-même.
Filtre ce jeu de résultats pour les valeurs supérieures où identifiant de comptage 2.
Je vais voir si j'Allongez la PK suffisamment, je vais effectivement trouver quelque chose d'unique.
La solution
Supprimer les contraintes / index uniques, insérer les données, puis exécutez cette requête:
SELECT col1, col2, ..., coln, COUNT(*)
FROM your_table
GROUP BY col1, col2, ..., coln
HAVING COUNT(*) > 1
où col1, col2, ..., coln
la liste des colonnes dans la clé (une des colonnes ou plus). Le résultat sera la liste des clés qui se produisent plus d'une fois avec un compte montrant à quelle fréquence ils se produisent.
Autres conseils
select col1, ... from tab group by col1, ... having count(*)>1;
SELECT * FROM (SELECT ID, COUNT(*) CNT FROM MY_TABLE GROUP BY ID) WHERE CNT > 1