Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 14609|Svare: 0

[Tips] SQL Hvordan spørre i en tabell for å fjerne duplikater

[Kopier lenke]
Publisert på 09.10.2014 11:03:04 | | |

SQL enkelt-/multitabellsspørringer fjerner dupliserte poster

Enkelt tabell distinkt

  1. select distinct 字段 from 表
Kopier koden

Mange stemmer grupperes etter

gruppe by må plasseres før bestilling av og grense, ellers vil en feil bli rapportert

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

1. Finn de redundante duplikatpostene i tabellen, og duplikatpostene vurderes basert på ett enkelt felt (peopleId).

Velg * fra personer
hvor peopleId i (velg peopleId fra people group etter peopleId som teller(peopleId) > 1)

2. Slett de overflødige dupliserte postene i tabellen, og duplikatpostene vurderes basert på ett enkelt felt (peopleId), slik at kun postene med minste rowid blir igjen
Slett fra folk
hvor peopleId i (velg peopleId fra people group etter peopleId som teller(peopleId) > 1)
og rowid ikke i (velg min(rowid) fra people group etter peopleId har count(peopleId )>1)

3. Finn redundante duplikatposter (flere felt) i tabellen
velg * fra vitae a
hvor (a.peopleId,a.seq) i (velg peopleId,seq fra vitae-gruppe etter peopleId,seq med tell(*) > 1)

4. Slett de overflødige dupliserte postene (flere felt) i tabellen, slik at kun postene med minste rowid blir igjen
Slett fra Vitae A
hvor (a.peopleId,a.seq) i (velg peopleId,seq fra vitae-gruppe etter peopleId,seq med tell(*) > 1)
og rowid ikke i (velg min(rowid) fra vitae-gruppen av peopleId,seq har tell(*)>1)


5. Finn redundante duplikatposter (flere felt) i tabellen, og inneholder ikke poster med minst rowid
velg * fra vitae a
hvor (a.peopleId,a.seq) i (velg peopleId,seq fra vitae-gruppe etter peopleId,seq med tell(*) > 1)
og rowid ikke i (velg min(rowid) fra vitae-gruppen av peopleId,seq har tell(*)>1)

(to)
For eksempel
Det finnes et felt "navn" i tabell A,
Og "navn"-verdien kan være den samme mellom ulike poster,
Nå må du søke etter elementer med dupliserte "navn"-verdier mellom poster i tabellen;
Velg navn, antall(*) fra en gruppe etter navn som har antall(*) > 1

Hvis kjønnet også er det samme, er det som følger:
Velg navn, kjønn, antall(*) fra en gruppe etter navn, kjønn som teller(*) > 1

(tre)
Metode 1

erklære @max heltall,@id heltall

erklære cur_rows markør lokal for utvalgt hovedfelt, tell(*) fra tabellnavngruppe etter hovedfelt med tell(*) >; 1

Åpne cur_rows

Hent cur_rows til @id,@max

mens @@fetch_status=0

Begynn

velg @max = @max -1

Sett radtelling @max

Slett fra tabellnavn hvor primærfelt = @id

Hent cur_rows til @id,@max
slutt

Lukk cur_rows

Sett radtelling 0

Metode 2

"Dupliserte poster" har to betydninger av dupliserte poster, den ene er en fullstendig duplisert post, det vil si en post med alle felt duplisert, og den andre er en post med dupliserte deler av nøkkelfelt, slik at Navn-feltet er duplisert, mens andre felt ikke nødvendigvis er dupliserte eller kan ignoreres.

1. For den første typen repetisjon er den relativt enkel å løse og bruke

velg forskjellig * fra tableName

Du kan få resultatsettet uten dupliserte poster.

Hvis du trenger å slette dupliserte poster (beholde 1 duplikatpost), kan du slette dem som følger

velg distinkt * i #Tmp fra tableName

dropptabell Navn

velg * inn i tableName fra #Tmp
Droppbord #Tmp

Denne dupliseringen oppstår på grunn av dårlig tabelldesign og kan løses ved å legge til unike indekskolonner.

2. Denne typen duplikatproblem krever vanligvis at den første posten i duplikatposten beholdes, og operasjonsmetoden er som følger

Anta at det finnes duplikatfelt med Navn og Adresse, og du må få et unikt resultatsett for disse to feltene

velg identity(int,1,1) som autoID, * inn i #Tmp fra tableName

velg min(autoID) som autoID i #Tmp2 fra #Tmp gruppe etter Name,autoID

velg * fra #Tmp der autoID er (velg autoID fra #tmp2)

Den siste selecten får resultatsettet Navn og Adresse som ikke gjentas (men det finnes et ekstra autoID-felt, som kan skrives i select-klausulen når man faktisk skriver)

(4)
Forespørsler er dupliserte

Velg * fra tabellnavn hvor id er i (velg id fra tabellnavn

Grupper etter ID

med telling(id) > 1

)

3. Finn redundante duplikatposter (flere felt) i tabellen
velg * fra vitae a
hvor (a.peopleId,a.seq) i (velg peopleId,seq fra vitae-gruppe etter peopleId,seq med tell(*) > 1)

Å kjøre vil skape problemer, og å skrive og sende som where (a.peopleId, a.seq) vil ikke fungere!!






Foregående:SQL lager lagrede prosedyrer med parametere
Neste:EPUBReader-leser, et must for å åpne EPUB-filer
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com