|
Le query SQL singole/multi-tabella rimuovono record duplicati Tavola singola distinta - 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à!!
|