Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 14609|Risposta: 0

[Consigli] SQL Come interrogare una tabella per rimuovere duplicati

[Copiato link]
Pubblicato su 09/10/2014 11:03:04 | | |

Le query SQL singole/multi-tabella rimuovono record duplicati

Tavola singola distinta

  1. select distinct 字段 from 表
Copia codice

Molti voti sono raggruppati per

Il gruppo di deve essere posto prima dell'ordine di e limite, altrimenti verrà segnalato un errore

************************************************************************************

1. Trovare i record duplicati ridondanti nella tabella e i record duplicati sono giudicati in base a un singolo campo (peopleId).

seleziona * da persone
dove peopleId in (seleziona peopleId dal gruppo di persone per personId che ha conteggio(personeId) > 1)

2. Elimina i record duplicati ridondanti nella tabella e i record duplicati vengono giudicati in base a un singolo campo (peopleId), lasciando solo i record con il rowid più piccolo
elimina da persone
dove peopleId in (seleziona peopleId dal gruppo di persone per personId che ha conteggio(personeId) > 1)
e rowid non in (seleziona min(rowid) dal gruppo persone per personeId che ha conteggio(personeId)>1)

3. Trovare record duplicati ridondanti (campi multipli) nella tabella
seleziona * da vitae a
dove (a.peopleId,a.seq) in (seleziona peopleId,seq dal gruppo vitae per peopleId,seq che ha conteggio(*) > 1)

4. Elimina i record duplicati ridondanti (campi multipli) nella tabella, lasciando solo i record con il rowid più piccolo
elimina dal vitae a
dove (a.peopleId,a.seq) in (seleziona peopleId,seq dal gruppo vitae per peopleId,seq che ha conteggio(*) > 1)
e rowid non in (seleziona min(rowid) dal gruppo vitae tramite peopleId,seq che ha conteggio(*)>1)


5. Trovare record duplicati ridondanti (campi multipli) nella tabella e non contenere record con il minor rowid
seleziona * da vitae a
dove (a.peopleId,a.seq) in (seleziona peopleId,seq dal gruppo vitae per peopleId,seq che ha conteggio(*) > 1)
e rowid non in (seleziona min(rowid) dal gruppo vitae tramite peopleId,seq che ha conteggio(*)>1)

(due)
Per esempio
C'è un campo "nome" nella tabella A,
E il valore del "nome" può essere lo stesso tra diversi registri,
Ora devi interrogare gli elementi con valori duplicati di "nome" tra i record nella tabella;
Seleziona Nome, Conte(*) da un gruppo per nome che ha Conteggio(*) > 1

Se anche il genere è lo stesso, è il seguente:
Seleziona nome, sesso, conteggio(*) da un gruppo per nome, sesso che ha conteggio(*) > 1

(tre)
Metodo 1

dichiarare @max intero, @id intero

dichiarare cur_rows cursore locale per un campo principale selezionato, count(*) dal gruppo di nomi della tabella per campo principale con count(*) >; 1

Aperto cur_rows

Porta cur_rows in @id.@max

mentre @@fetch_status=0

inizio

seleziona @max = @max -1

imposta il numero di righe @max

elimina dal nome della tabella dove campo primario = @id

Porta cur_rows in @id.@max
fine

Close cur_rows

set conteggio righe 0

Metodo 2

"Record duplicati" ha due significati di record duplicati: uno è un record completamente duplicato, cioè un record con tutti i campi duplicati, e l'altro è un record con parti duplicate di campi chiave, come il campo Nome è duplicato, mentre altri campi non sono necessariamente duplicati o possono essere ignorati.

1. Per il primo tipo di ripetizione, è relativamente facile da risolvere e utilizzare

select distinct * da tableName

Puoi ottenere il set di risultati senza record duplicati.

Se devi eliminare i record duplicati (mantenendo 1 record duplicato), puoi eliminarli come segue

seleziona distinct * in #Tmp da tableName

tabella di drop NameName

select * in tableName da #Tmp
Drop Table #Tmp

Questa duplicazione avviene a causa di una cattiva progettazione delle tabelle e può essere risolta aggiungendo colonne indice uniche.

2. Questo tipo di problema duplicato di solito richiede che il primo record del record duplicato venga mantenuto, e il metodo operativo è il seguente

Supponiamo che ci siano campi duplicati di Nome e Indirizzo, e che tu debba ottenere un set di risultati unico per questi due campi

select identity(int,1,1) come autoID, * in #Tmp da tableName

select min(autoID) come autoID in #Tmp2 dal gruppo #Tmp per Nome,autoID

select * da #Tmp dove autoID in (seleziona autoID da #tmp2)

L'ultimo select ottiene il set di risultati Name e Address che non vengono ripetuti (ma c'è un campo autoID aggiuntivo, che può essere scritto nella clausola select quando si scrive effettivamente)

(4)
Le query sono duplicate

seleziona * da nome della tabella dove l'ID è (seleziona l'ID da nome della tabella

Gruppo per ID

avere count(id) > 1

)

3. Trovare record duplicati ridondanti (campi multipli) nella tabella
seleziona * da vitae a
dove (a.peopleId,a.seq) in (seleziona peopleId,seq dal gruppo vitae per peopleId,seq che ha conteggio(*) > 1)

Correre causerà problemi, e scrivere e inviare come where(a.peopleId, a.seq) non funzionerà!!






Precedente:SQL crea stored procedure con parametri
Prossimo:Lettore EPUBReader, un must-have per aprire i file EPUB
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com