|
SQL ühe-/mitme tabeliga päringud eemaldavad duplikaatkirjed Üksik tabel erineb - 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!!
|