Domanda

Qual è il modo più efficiente per rilevare i duplicati in una tabella a 10 colonne / 50.000 righe? Sto usando MSSQL 8.0

È stato utile?

Soluzione

Per mostrare un esempio di ciò che altri hanno descritto:

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

Altri suggerimenti

Puoi utilizzare il gruppo per su tutte le colonne e quindi count(*)>1

Prova questo

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

Per rilevare, basta raggruppare come ha detto Guge.

select fieldA, fieldB, count(*) from table
group by fieldA, fieldB
having count(*) > 1

Se si desidera eliminare i duplicati ... pseudo ....

select distinct into a temp table
truncate original table
select temp table back into original table

Con troncamento potresti incorrere in problemi se hai vincoli FK, quindi sii intelligente nel lasciar cadere i vincoli e assicurarti di non lasciare orfani.

Oltre ai suggerimenti forniti, vorrei andare allo sforzo di prevenire i duplicati in futuro, piuttosto che cercare di individuarli in seguito.

Questo viene fatto usando indici univoci su colonne (o gruppi di colonne) che dovrebbero essere univoci. Ricorda che i dati nel database possono essere modificati da altre posizioni diverse dall'app specifica su cui stai lavorando, quindi è meglio definire ciò che è e non è consentito in una tabella a livello di DB.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top