web-dev-qa-db-fra.com

Comment détecter les lignes en double dans une table SQL Server?

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

37
Bajji

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
57
knightpfhor

Vous pouvez utiliser group by Sur toutes les colonnes puis count(*)>1

13
Guge

Essaye ça

Select * From Table
Group By [List all fields in the Table here]
Having Count(*) > 1
7
Charles Bretana

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.

3
LeppyR64

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.

3
Aaron Palmer