Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 14609|Svar: 0

[Tips] SQL Sådan forespørger du en tabel for at fjerne dubletter

[Kopier link]
Opslået på 09/10/2014 11.03.04 | | |

SQL enkelt-/flertabelforespørgsler fjerner dublerede poster

Enkelt tabel særskilt

  1. select distinct 字段 from 表
Kopier kode

Mange stemmer grupperes efter

gruppe af skal placeres før ordre af og grænse, ellers vil en fejl blive rapporteret

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

1. Find de redundante dubletposter i tabellen, og de dubletposter vurderes ud fra et enkelt felt (peopleId).

Vælg * fra personer
hvor peopleId i (vælg peopleId fra people group efter peopleId med count(peopleId) > 1)

2. Slet de redundante dubletposter i tabellen, og de dubletposter vurderes ud fra et enkelt felt (peopleId), så kun posterne med den mindste rowid er tilbage
slet fra folk
hvor peopleId i (vælg peopleId fra people group efter peopleId med count(peopleId) > 1)
og rowid ikke i (vælg min(rowid) fra people group efter peopleId har count(peopleId )>1)

3. Find redundante dubletter (flere felter) i tabellen
Vælg * fra Vitae A
hvor (a.peopleId,a.seq) i (select peopleId,seq fra vitae-gruppe ved peopleId,seq med tælling(*) > 1)

4. Slet de redundante duplikatposter (flere felter) i tabellen, så kun posterne med den mindste rowid er tilbage, så kun posterne med den mindste rowid er tilbage
slet fra vitae a
hvor (a.peopleId,a.seq) i (select peopleId,seq fra vitae-gruppe ved peopleId,seq med tælling(*) > 1)
og rowid not in (vælg min(rowid) fra vitae-gruppen af peopleId,seq har tælling(*)>1)


5. Find redundante dubletposter (flere felter) i tabellen og indeholder ikke poster med mindst rowid
Vælg * fra Vitae A
hvor (a.peopleId,a.seq) i (select peopleId,seq fra vitae-gruppe ved peopleId,seq med tælling(*) > 1)
og rowid not in (vælg min(rowid) fra vitae-gruppen af peopleId,seq har tælling(*)>1)

(to)
For eksempel
Der er et felt-"navn" i tabel A,
Og "navn"-værdien kan være den samme mellem forskellige poster,
Nu skal du forespørge efter elementer med dubblerede "navn"-værdier mellem poster i tabellen;
Vælg navn, antal(*) fra en gruppe efter navn, der har antal(*) > 1

Hvis kønnet også er det samme, er det som følger:
Vælg navn, køn, antal(*) fra en gruppe efter navn, køn med antal(*) > 1

(tre)
Metode 1

erklære @max heltal,@id heltal

erklære cur_rows markør lokal for select main field, count(*) fra tabelnavn, gruppe efter hovedfelt med count(*) >; 1

Åbn cur_rows

Hent cur_rows ind i @id,@max

mens @@fetch_status=0

Begynd

vælg @max = @max -1

Sæt rækketælling @max

slet fra tabelnavn, hvor primærfelt = @id

Hent cur_rows ind i @id,@max
slut

Luk cur_rows

Sæt rækkeantal 0

Metode 2

"Duplikerede poster" har to betydninger af duplikerede poster: den ene er en fuldstændig duplikeret post, det vil sige en post med alle felter duplikeret, og den anden er en post med dubletdele af nøglefelter, såsom at Navn-feltet er duplikeret, mens andre felter ikke nødvendigvis er duplikerede eller kan ignoreres.

1. For den første type gentagelse er den relativt nem at løse og bruge

vælg forskellig * fra tableName

Du kan få resultatsættet uden dubletter af posterne.

Hvis du skal slette dublerede poster (beholde 1 duplikeret post), kan du slette dem som følger

vælg forskellig * i #Tmp fra tableName

drop-tabel tableNavn

vælg * i tableName fra #Tmp
Drop-tabel #Tmp

Denne duplikering opstår på grund af dårligt tabeldesign og kan løses ved at tilføje unikke indekskolonner.

2. Denne type duplikatproblem kræver normalt, at den første post i den dublette post bevares, og operationsmetoden er som følger

Antag, at der er dubletter med Navn og Adresse, og du skal have et unikt resultatsæt for disse to felter

vælg identity(int,1,1) som autoID, * i #Tmp fra tableName

vælg min(autoID) som autoID i #Tmp2 fra #Tmp gruppe efter Navn, autoID

vælg * fra #Tmp hvor autoID er (vælg autoID fra #tmp2)

Den sidste select får resultatsættet af Name og Address, som ikke gentages (men der er et ekstra autoID-felt, som kan skrives i select-klausulen, når man faktisk skriver)

(4)
Forespørgsler er duplikerede

Vælg * fra tabelnavn, hvor id er i (vælg id fra tablename)

Grupper efter ID

med count(id) > 1

)

3. Find redundante dubletter (flere felter) i tabellen
Vælg * fra Vitae A
hvor (a.peopleId,a.seq) i (select peopleId,seq fra vitae-gruppe ved peopleId,seq med tælling(*) > 1)

At køre vil give problemer, og at skrive og sende som where (a.peopleId, a.seq) virker ikke!!






Tidligere:SQL opretter lagrede procedurer med parametre
Næste:EPUBReader-læser, et must-have til åbning af EPUB-filer
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com