Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 14609|Vastaus: 0

[Vinkkejä] SQL Kuinka pyytää taulukkoa poistamaan päällekkäiset kappaleet

[Kopioi linkki]
Julkaistu 9.10.2014 11.03.04 | | |

SQL:n yksi-/monitaulukyselyt poistavat päällekkäiset tietueet

Yksittäinen taulukko erillinen

  1. 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!!






Edellinen:SQL luo tallennettuja proseduureja parametreilla
Seuraava:EPUBReader-lukija, ehdoton hankinta EPUB-tiedostojen avaamiseen
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com