|
SQL:n yksi-/monitaulukyselyt poistavat päällekkäiset tietueet Yksittäinen taulukko erillinen - select distinct 字段 from 表
Kopioi koodi
Monet äänet ryhmitellään ryhmä by täytyy asettaa ennen tilausta ja rajaa, muuten virhe raportoidaan ************************************************************************************ 1. Etsi tarpeettomat kaksoiskappaleet taulukosta, ja kaksoiskappaleet arvioidaan yhden kentän (peopleId) perusteella. Valitse * henkilöistä missä peopleId in (valitse peopleId ihmisryhmästä ihmisten mukaanId, jolla on count(peopleId) > 1) 2. Poista taulukosta päällekkäiset kaksoiskappaleet, ja päällekkäiset tietueet arvioidaan yhden kentän (peopleId) perusteella, jolloin jäljelle jäävät vain ne tietuet, joissa on pienin rowid Poista ihmisistä missä peopleId in (valitse peopleId ihmisryhmästä ihmisten mukaanId, jolla on count(peopleId) > 1) ja rowid not in (valitse min(rowid) people-ryhmästä peopleId:n mukaan, jolla on count(peopleId)>1) 3. Etsi taulusta päällekkäiset kaksoiskappaleet (useita kenttiä) Valitse * Vitae A:sta missä (a.peopleId,a.seq) (valitse peopleId,seq vitae-ryhmästä peopleId,seq by peopleId, seq with count(*) > 1) 4. Poista taulukosta päällekkäiset kaksoiskappaleet (useita kenttiä), jättäen jäljelle vain pienin rowid-tietueet Poista Vitae A:sta missä (a.peopleId,a.seq) (valitse peopleId,seq vitae-ryhmästä peopleId,seq by peopleId, seq with count(*) > 1) ja rowid not in (valitse min(rowid) vitae-ryhmästä peopleId, seq with count(*)>1) 5. Etsi taulukosta päällekkäiset kaksoiskappaleet (useita kenttiä), äläkä sisällä tietueita, joissa on vähiten rowid-tietueita Valitse * Vitae A:sta missä (a.peopleId,a.seq) (valitse peopleId,seq vitae-ryhmästä peopleId,seq by peopleId, seq with count(*) > 1) ja rowid not in (valitse min(rowid) vitae-ryhmästä peopleId, seq with count(*)>1)
(kaksi) Esimerkiksi Taulukossa A on kenttä "nimi", Ja "nimi"-arvo voi olla sama eri tietueiden välillä, Nyt sinun täytyy hakea alkioita, joilla on päällekkäiset "nimi"-arvot taulukon tietueiden välillä; Valitse Nimi, Määrä (*) ryhmästä nimellä, jonka Count(*) > 1 Jos sukupuoli on sama, se on seuraava: Valitse nimi, sukupuoli, lukumäärä (*) ryhmästä nimen, sukupuolen ja määrän mukaan(*) > 1 (kolme) Menetelmä 1 julista @max kokonaisluku@id kokonaisluku määritä cur_rows kursori paikallinen valitsemaan pääkenttä, count(*) taulukon nimiryhmästä pääkentän mukaan, jossa count(*) >; 1 Avaa cur_rows Hae cur_rows @id,@max kun taas @@fetch_status=0 Aloita valitse @max = @max -1 aseta rivimäärä @max Poista taulun nimestä, jossa ensisijainen kenttä = @id Hae cur_rows @id,@max loppu Lähellä cur_rows aseta rivimäärä 0 Menetelmä 2 "Duplikaattitietueilla" on kaksi merkitystä: toinen on täysin päällekkäinen tietue, eli tietue, jossa kaikki kentät on kaksinkertaisia, ja toinen on tietue, jossa on päällekkäisiä osia avainkentistä, kuten Nimi-kenttä on kaksinkertainen, kun taas muut kentät eivät välttämättä ole kaksinkertaisia tai ne voi jättää huomiotta. 1. Ensimmäisen toistotyypin kohdalla sen ratkaiseminen ja käyttö on suhteellisen helppoa valitse distinct * from tableName Voit saada tulosjoukon ilman päällekkäisiä tietueita. Jos sinun täytyy poistaa päällekkäiset tietueet (säilyttää yksi kaksoiskappale), voit poistaa ne seuraavasti valitse erillinen * #Tmp taulukon nimestä drop table tableName valitse * taulukkonimeen #Tmp Pudota pöytä #Tmp Tämä päällekkäisyys johtuu huonosta taulukkosuunnittelusta, ja se voidaan ratkaista lisäämällä ainutlaatuisia indeksisarakkeita. 2. Tämän tyyppinen duplikaattiongelma vaatii yleensä, että ensimmäinen tietue duplikaattitietueessa säilytetään, ja toimintatapa on seuraava Oletetaan, että Nimi ja Osoite ovat päällekkäisiä, ja sinun täytyy saada yksikäsitteinen tulosjoukko näille kahdelle kentälle valitse identity(int,1,1) autoID:ksi, * #Tmp taulukon nimestä valitse min(autoID) autoID:ksi #Tmp2 ryhmästä #Tmp nimellä, autoID:llä valitse * #Tmp, missä autoID sisään (valitse autoID #tmp2) Viimeinen valinta saa tulokset nimestä ja osoitteesta, joita ei toisteta (mutta lisä-automaattitunniste-kenttä voidaan kirjoittaa valintalauseeseen varsinaisen kirjoittamisen yhteydessä) (4) Kyselyt toistetaan Valitse * taulukon nimestä, missä id (valitse id taulukon nimestä Ryhmä id:n mukaan jonka count(id) > 1 ) 3. Etsi taulusta päällekkäiset kaksoiskappaleet (useita kenttiä) Valitse * Vitae A:sta missä (a.peopleId,a.seq) (valitse peopleId,seq vitae-ryhmästä peopleId,seq by peopleId, seq with count(*) > 1) Juokseminen aiheuttaa ongelmia, ja kirjoittaminen ja lähettäminen kuten (a.peopleId, a.seq) ei toimi!!
|