SQLShack (Suomi)

Tässä artikkelissa selitetään prosessi SQL-poistotoiminnon suorittaminen päällekkäisille riveille SQL-taulukosta.

Johdanto

Meidän on noudatettava tiettyjä parhaita käytäntöjä suunniteltaessa objekteja SQL Serverissä. Esimerkiksi taulukossa tulisi olla ensisijaiset avaimet, identiteettisarakkeet, klusteroidut ja ryhmittymättömät indeksit, rajoitukset tietojen eheyden ja suorituskyvyn varmistamiseksi. Jopa me noudatamme parhaita käytäntöjä, ja saatamme kohdata esimerkiksi kaksoisrivejä. Saatamme saada nämä tiedot myös tietojen tuonnin välitaulukoihin, ja haluamme poistaa päällekkäiset rivit ennen tosiasiallista lisäämistä tuotantotaulukoihin.

Oletetaan, että SQL-taulukko sisältää päällekkäisiä rivejä ja haluat poistaa päällekkäiset rivit. . Monta kertaa kohtaamme nämä ongelmat. Paras käytäntö on myös käyttää asiaankuuluvia avaimia ja rajoituksia päällekkäisten rivien poistamiseksi, mutta jos taulukossa on jo kaksoisrivejä. Meidän on noudatettava erityisiä menetelmiä päällekkäisten tietojen puhdistamiseksi. Tässä artikkelissa tarkastellaan eri tapoja poistaa päällekkäiset tiedot SQL-taulukosta.

Luodaan esimerkki Employee-taulukosta ja lisätään siihen muutama tietue.

Meillä on taulukossa muutama päällekkäinen tietue, ja meidän on poistettava ne.

SQL poistaa päällekkäiset rivit Group By -ominaisuuden avulla ja käyttämällä lauseketta

Tässä menetelmässä tunnistamme kopion SQL GROUP BY -lausekkeella riviä. Ryhmittele lausekkeella ryhmittelee tiedot määriteltyjen sarakkeiden mukaan, ja voimme käyttää COUNT-toimintoa rivin esiintymisen tarkistamiseen.

Suorita esimerkiksi seuraava kysely, niin saamme tietueet, joiden esiintymä on suurempi kuin 1 työntekijän taulukossa.

Yllä olevassa lähdössä on kaksi päällekkäistä tietuetta, joiden tunnus on 1 ja 3.

  • Emp ID 1: llä on kaksi esiintymää Työntekijä-taulukossa
  • Emp ID 3: lla on kolme esiintymää Työntekijä-taulukossa

Meidän on säilytettävä yhdellä rivillä ja poista päällekkäiset rivit. Meidän on poistettava taulukosta vain päällekkäiset rivit. Esimerkiksi EmpID 1 näkyy taulukossa kaksi kertaa. Haluamme poistaa vain yhden esiintymän.

Laskemme kunkin tietorivin enimmäistunnuksen SQL MAX -funktiolla.

Seuraavassa kuvakaappauksessa voimme nähdä, että yllä oleva Select-lause sulkee pois päällekkäisen rivin enimmäistunnuksen ja saamme vain vähimmäistunnuksen arvon.

Voit poistaa nämä tiedot korvaamalla ensin valitse SQL delete -lausekkeella seuraavan kyselyn mukaisesti.

Kun olet suorittanut poistolausekkeen, tee valinta Employee-taulukossa, ja saamme seuraavat tietueet, jotka eivät sisällä päällekkäisiä rivejä.

SQL poistaa päällekkäiset rivit käyttämällä yhteisiä taulukkolausekkeita (CTE)

Voimme käyttää yleisiä taulukkoilmauksia, jotka yleisesti tunnetaan nimellä CTE, poistaa päällekkäiset rivit SQL Serverissä. Se on saatavana SQL Server 2005: stä lähtien.

Käytämme SQL ROW_NUMBER -funktiota ja se lisää riville yksilöllisen peräkkäisen rivinumeron.

Seuraavassa CTE: ssä se osioi tiedot PARTITION BY -lausekkeen avulla sarakkeelle ja ja luo rivinumeron kullekin riville.

Jos jossakin rivissä sarakkeen arvo on suurempi kuin 1, tulos osoittaa, että se on kaksoiskappale. rivi.

Voimme poistaa päällekkäiset rivit seuraavan CTE: n avulla.

Se poistaa rivit joiden arvo on suurempi kuin 1

RANK-funktio SQL: n poistamiseksi päällekkäisistä riveistä

Voimme poistaa SQL RANK -toiminnon myös kaksoisrivit. SQL RANK -toiminto antaa jokaiselle riville yksilöllisen rivitunnuksen kaksoisrivistä riippumatta.

Seuraavassa kyselyssä käytämme RANK-funktiota PARTITION BY -lausekkeen kanssa. PARTITION BY -lauseke valmistelee osajoukon määritetyille sarakkeille ja antaa sijoinnin tälle osiolle.

Kuvakaappauksessa voit huomata, että meidän on poistettava rivi, jonka sijoitus on suurempi kuin yksi. Poistetaan nuo rivit seuraavalla kyselyllä.

Käytä SSIS-pakettia SQL: n poistamiseen päällekkäisistä riveistä

SQL Server -integrointipalvelu tarjoaa erilaisia muunnoksia, operaattoreita, jotka auttavat sekä järjestelmänvalvojia että kehittäjiä vähentämään manuaalista vaivaa ja optimoida tehtävät. SSIS-paketti voi poistaa päällekkäiset rivit myös SQL-taulukosta.

Käytä SSIS-paketin lajitteluoperaattoria kaksoiskappaleiden poistamiseen

Lajitteluoperaattorilla voimme lajitella arvot SQL-taulukko. Voisit kysyä, kuinka tietojen lajittelu voi poistaa päällekkäiset rivit?

Luodaan SSIS-paketti tämän tehtävän näyttämiseksi.

  • Luo uusi integraatiopaketti SQL Server Data Tools -sovelluksessa.Lisää uuteen pakettiin OLE DB-lähdeyhteys
  • Avaa OLE DB-lähdekoodieditori ja määritä lähdeyhteys ja valitse kohdetaulukko

  • Napsauta Esikatsele tietoja ja näet, että lähdetaulukossa on edelleen kaksoiskappaleita

  • Lisää lajitteluoperaattori SSIS-työkalupakista SQL-poistotoimintaa varten ja yhdistä se lähdetietoihin

Lajittelu-operaattorin kokoonpanoa varten kaksoisnapsauta sitä ja valitse sarakkeet, jotka sisältävät päällekkäisiä arvoja. Meidän tapauksessamme kaksoisarvo on sarakkeissa,.,

Voimme myös käyttää sarakkeissa nousevia tai laskevia lajittelutyyppejä. Oletuslajittelutapa on nouseva. Lajittelujärjestyksessä voimme valita sarakkeiden järjestysjärjestyksen. Lajittelujärjestys 1 näyttää sarakkeen, joka lajitellaan ensin.

Huomaa vasemmassa alakulmassa valintaruutu Poista rivit päällekkäiset lajitteluarvot.

Se poistaa päällekkäiset rivit lähdetiedoista. Lisätään rasti tähän valintaruutuun ja napsautetaan ok. Se suorittaa SQL-poistotoiminnon SSIS-paketissa.

Kun napsautamme OK, se palaa tietovirran välilehteen, ja voimme nähdä seuraavan SSIS-paketin.

Voimme lisätä SQL Server -kohteet tietojen tallentamiseen kaksoisrivien poistamisen jälkeen. Haluamme vain tarkistaa, että lajitteluoperaattori suorittaa tehtävän meille vai ei.

Lisää SQL Multicast Transformation SSIS-työkalupakista alla esitetyllä tavalla.

Jos haluat tarkastella erillisiä tietoja, napsauta hiiren kakkospainikkeella Lajittelu ja Monilähetys -liitintä. Napsauta Ota Data Viewer käyttöön.

SSIS-kokonaispaketti näyttää alla olevalta.

Suorita SQL-poisto suorittamalla paketti. Se avaa Lajittele lähtötietojen katseluohjelman Tiedonsiirto-tehtävässä. Tässä datankatseluohjelmassa näet erilliset tiedot poistettuasi päällekkäiset arvot.

Sulje tämä ja SSIS-paketti näkyy onnistuneesti suoritettu.

Johtopäätös

Tässä artikkelissa tutkittiin päällekkäisten rivien SQL-poistoprosessia eri tavoin, kuten T-SQL, CTE ja SSIS-paketti. Voit käyttää menetelmää, jossa tunnet olosi mukavaksi. Ehdotan kuitenkin, että näitä menettelyjä ja paketteja ei oteta suoraan käyttöön tuotantotiedoissa. Testaa alemmassa ympäristössä.

  • Kirjoittaja
  • Viimeaikaiset viestit
MCSA-sertifioitu ja Microsoftin sertifioima kouluttaja Gurgaonissa Intiassa, jolla on 13 vuoden kokemus, Rajendra työskentelee useissa suurissa yrityksissä, jotka keskittyvät suorituskyvyn optimointiin, seurantaan, korkeaan käytettävyyteen sekä katastrofien palautusstrategioihin ja toteutukseen. Hän on kirjoittanut satoja arvovaltaisia artikkeleita SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS / Amazon RDS, Git ja niihin liittyvistä tekniikoista, joita tähän mennessä on lukenut yli 10 miljoonaa lukijaa.
Hän on luonut yhden suurimmista ilmaisista online-artikkelikokoelmista yhdestä aiheesta, 50-osaisella sarjallaan SQL Server Always On Availability Groups -ryhmissä. Hänen osuutensa perusteella SQL Server -yhteisöön hänet on tunnustettu useilla palkinnoilla, kuten arvostettu ”Vuoden paras kirjailija” jatkuvasti vuosina 2020 ja 2021 SQLShackissa.
Raj on aina kiinnostunut uusista haasteista, joten jos tarvitset konsultointia apua mistä tahansa kirjoituksissaan käsitellystä aiheesta, hän on tavoitettavissa osoitteessa [email protected]
Näytä kaikki viestit, jotka on kirjoittanut Rajendra Gupta

Viimeisimmät viestit, jotka on kirjoittanut Rajendra Gupta (katso kaikki)
  • Pienien ja suurten versiopäivitysten tekeminen AWS: lle RDS SQL Server – 29. tammikuuta 2021
  • AWS RDS PostgreSQL -esiintymien käyttöönotto – 27. tammikuuta 2021
  • Paikallisten SQL-tietokantojen siirtäminen AWS RDS SQL Serveriin AWS DMS: n avulla – 25. tammikuuta , 2021

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *