See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 14609|Vastuse: 0

[Nõuanded] SQL: Kuidas pärida tabelit, et eemaldada duplikaadid

[Kopeeri link]
Postitatud 09.10.2014 11:03:04 | | |

SQL ühe-/mitme tabeliga päringud eemaldavad duplikaatkirjed

Üksik tabel erineb

  1. select distinct 字段 from 表
Kopeeri kood

Paljud hääled jagunevad kaupa

Group by tuleb esitada enne tellimust by ja limit, vastasel juhul teatatakse viga

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

1. Leia tabelist korduvad duplikaatkirjed ja duplikaatkirjed hinnatakse ühe välja (peopleId) alusel.

Vali * inimeste hulgast
kus peopleId in (vali peopleId grupist inimeste järgi, kellel on arv (peopleId) > 1)

2. Kustuta tabelist üleliigsed duplikaatkirjed ning duplikaatkirjed hinnatakse ühe välja (peopleId) alusel, jättes alles vaid kirjed, millel on väikseim rowid
kustuta inimestest
kus peopleId in (vali peopleId grupist inimeste järgi, kellel on arv (peopleId) > 1)
ja rowid not in (vali min(rowid) rahvagrupist inimese järgi, järgides peopleId, kellel on arv (peopleId)>1)

3. Leia tabelist korduvad duplikaatkirjed (mitu välja)
Vali * Vitae A-st
kus (a.peopleId,a.seq) in (vali peopleId,seq vitae grupist peopleId,seq by peopleId,seq with count(*) > 1)

4. Kustuta tabelist üleliigsed duplikaatkirjed (mitu välja), jättes alles ainult kirjed, millel on väikseim rowid
Kustuta Vitae A-st
kus (a.peopleId,a.seq) in (vali peopleId,seq vitae grupist peopleId,seq by peopleId,seq with count(*) > 1)
ja rowid not in (vali min(rowid) vitae grupist peopleId, seq with count(*)>1)


5. Leia tabelist korduvad duplikaatkirjed (mitu välja) ja ei sisalda kirjeid, millel on kõige vähem rowid
Vali * Vitae A-st
kus (a.peopleId,a.seq) in (vali peopleId,seq vitae grupist peopleId,seq by peopleId,seq with count(*) > 1)
ja rowid not in (vali min(rowid) vitae grupist peopleId, seq with count(*)>1)

(kaks)
Näiteks
Tabelis A on väli "nimi",
Ja "nime" väärtus võib erinevate kirjete vahel olla sama,
Nüüd pead pärima esemeid, millel on duplikaatsed "nime" väärtused tabeli kirjete vahel;
Vali Nimi, Loend (*) Grupist Nime järgi, Loend (*) > 1

Kui ka sugu on sama, on see järgmine:
Vali nimi, sugu, arv (*) grupist nime järgi, soo ja arv (*) > 1

(kolm)
Meetod 1

deklareeri @max täisarv,@id täisarv

deklareerida cur_rows kursor lokaal põhivälja valimiseks, count(*) tabeli nimegrupist põhivälja kaupa, millel on count(*) >; 1

Ava cur_rows

Too cur_rows @id,@max

samal ajal kui @@fetch_status=0

Alusta

vali @max = @max -1

Sea ridade arv @max

kustuta tabeli nimest, kus peamine väli = @id

Too cur_rows @id,@max
Lõpp

Sulge cur_rows

Sea ridade arv 0

Meetod 2

"Duplikaatkirjetel" on duplikaatkirjete kaks tähendust: üks on täielikult duplikaatkirje, st kirje, kus kõik väljad on dubleeritud, ja teine on kirje, mille võtmeväljade osad on duplikaat, näiteks Nime väli, mis on dubleeritud, samas kui teised väljad ei pruugi olla dubleeritud või neid võib ignoreerida.

1. Esimese kordustüübi puhul on seda suhteliselt lihtne lahendada ja kasutada

vali eraldi * tabelinimest

Saad tulemuste komplekti ilma dubleeritud kirjeteta.

Kui pead duplikaatkirjeid kustutama (hoidma ühte duplikaatkirjet), saad need kustutada järgmiselt

vali eraldi * #Tmp tabelinime kaudu

drop table tableName

vali * tabelinime #Tmp
Eemalda laud #Tmp

See dubleerimine tekib halva tabeli disaini tõttu ja seda saab lahendada unikaalsete indeksiveergude lisamisega.

2. Selline duplikaatülesanne nõuab tavaliselt, et esimene kirje duplikaatkirjes säilitataks ning töömeetod on järgmine

Oletame, et on duplikaatväljad nime ja aadressiga ning nende kahe välja jaoks tuleb saada unikaalne tulemuste komplekt

select identity(int,1,1) autoID-ks, * #Tmp tabelinimest

vali min(autoID) autoID-ks #Tmp2 #Tmp grupist nime, autoID järgi

vali * #Tmp, kus autoID on (vali autoID #tmp2)

Viimane valik annab tulemuste komplekti nime ja aadressi kohta, mida ei korrata (kuid on olemas täiendav autoID väli, mida saab kirjutamisel valikuklausli sisse kirjutada)

(4)
Päringud dubleeritakse

Vali * tabelinimest, kus id (vali ID tabelinimest

Rühm id järgi

omades arvu(id) > 1

)

3. Leia tabelist korduvad duplikaatkirjed (mitu välja)
Vali * Vitae A-st
kus (a.peopleId,a.seq) in (vali peopleId,seq vitae grupist peopleId,seq by peopleId,seq with count(*) > 1)

Jooksmine tekitab probleeme ja kirjutamine ning saatmine nagu kus (a.peopleId, a.seq) ei tööta!!






Eelmine:SQL loob salvestatud protseduurid parameetritega
Järgmine:EPUBReader lugeja, hädavajalik EPUB failide avamiseks
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com