Quelle est la façon la plus efficace de détecter les doublons dans un tableau à 10 colonnes/50 000 lignes? J'utilise MSSQL 8.0
Pour montrer un exemple de ce que d'autres ont décrit:
SELECT
Col1, -- All of the columns you want to dedupe on
Col2, -- which is not neccesarily all of the columns
Col3, -- in the table
Col4,
Col5,
Col6,
Col7,
Col8,
Col9,
Col10
FROM
MyTable
GROUP BY
Col1,
Col2,
Col3,
Col4,
Col5,
Col6,
Col7,
Col8,
Col9,
Col10
HAVING
COUNT(*) > 1
Vous pouvez utiliser group by
Sur toutes les colonnes puis count(*)>1
Essaye ça
Select * From Table
Group By [List all fields in the Table here]
Having Count(*) > 1
En plus des suggestions fournies, je ferais alors l'effort de prévenir les doublons à l'avenir, plutôt que d'essayer de les localiser plus tard.
Cela se fait à l'aide d'index uniques sur des colonnes (ou groupes de colonnes) qui sont censés être uniques. N'oubliez pas que les données de la base de données peuvent être modifiées à partir d'autres emplacements que via l'application spécifique sur laquelle vous travaillez, il est donc préférable de définir ce qui est et n'est pas autorisé dans une table au niveau de la base de données.
Pour le détecter, il suffit de grouper comme l'a dit Guge.
select fieldA, fieldB, count(*) from table
group by fieldA, fieldB
having count(*) > 1
Si vous voulez supprimer les dupes ... pseudo ....
select distinct into a temp table
truncate original table
select temp table back into original table
Avec truncate, vous pouvez rencontrer des problèmes si vous avez des contraintes FK, alors soyez intelligent pour supprimer les contraintes et vous assurer de ne pas enregistrer les orphelins.