|
SQL enkelt-/flertabelforespørgsler fjerner dublerede poster Enkelt tabel særskilt - 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!!
|