Denne artikkelen forklarer prosessen for å utføre SQL-slettingsaktivitet for dupliserte rader fra en SQL-tabell.
Innledning
Vi bør følge visse gode fremgangsmåter når vi designer objekter i SQL Server. For eksempel bør en tabell ha primærnøkler, identitetskolonner, grupperte og ikke-grupperte indekser, begrensninger for å sikre dataintegritet og ytelse. Selv følger vi de beste fremgangsmåtene, og vi kan møte problemer som dupliserte rader. Vi kan også få disse dataene i mellomtabeller i dataimport, og vi vil fjerne dupliserte rader før vi faktisk setter inn i produksjonstabellene.
Anta at SQL-tabellen din inneholder dupliserte rader, og du vil fjerne de dupliserte radene . Mange ganger står vi overfor disse problemene. Det er også en god praksis å bruke de aktuelle tastene, begrensninger for å eliminere muligheten for dupliserte rader, men hvis vi allerede har dupliserte rader i tabellen. Vi må følge spesifikke metoder for å rydde opp dupliserte data. Denne artikkelen utforsker de forskjellige metodene for å fjerne dupliserte data fra SQL-tabellen.
La oss lage en eksempel medarbeidertabell og sette inn noen få poster i den.
I tabellen har vi en få dupliserte poster, og vi må fjerne dem.
SQL slette dupliserte rader ved hjelp av Group By og ha klausul
I denne metoden bruker vi SQL GROUP BY-klausulen for å identifisere duplikatet rader. Group By-setningen grupperer data i henhold til de definerte kolonnene, og vi kan bruke COUNT-funksjonen til å kontrollere forekomsten av en rad.
For eksempel, utfør følgende spørsmål, og vi får de postene som har forekomst større enn 1 i medarbeidertabellen.
I utgangen ovenfor har vi to duplikatposter med ID 1 og 3.
- Emp ID 1 har to forekomster i tabellen medarbeidere
- Emp ID 3 har tre forekomster i medarbeidertabellen
Vi trenger å beholde en enkelt rad og fjern de dupliserte radene. Vi trenger å fjerne bare dupliserte rader fra tabellen. For eksempel vises EmpID 1 to ganger i tabellen. Vi ønsker å fjerne bare en forekomst av den.
Vi bruker SQL MAX-funksjonen til å beregne maks ID for hver datarad.
I det følgende skjermbildet kan vi se at over Select-setningen ekskluderer Maks. id for hver dupliserte rad, og vi får bare minimum ID-verdi.
For å fjerne disse dataene, erstatt først velg med SQL-slettingsuttalelsen i henhold til følgende spørsmål.
Når du utfører slettingsuttrykket, utfører du et valg i en ansatt-tabell, og vi får følgende poster som ikke inneholder dupliserte rader.
SQL sletter dupliserte rader ved bruk av Common Table Expressions (CTE)
Vi kan bruke Common Table Expressions, ofte kjent som CTE, for å fjerne dupliserte rader i SQL Server. Den er tilgjengelig fra og med SQL Server 2005.
Vi bruker en SQL ROW_NUMBER-funksjon, og den legger til et unikt sekvensielt radnummer for raden.
I den følgende CTE partisjonerer den data ved bruk av PARTITION BY-leddet for, og kolonnen og genererer et radnummer for hver rad.
I utgangen, hvis en rad har verdien av kolonnen større enn 1, viser den at den er et duplikat rad.
Vi kan fjerne de dupliserte radene ved hjelp av følgende CTE.
Det fjerner radene med verdien større enn 1
RANK-funksjon for å slette dupliserte rader
Vi kan også bruke SQL RANK-funksjonen til å fjerne dupliserte rader. SQL RANK-funksjon gir unik rad-ID for hver rad, uavhengig av den dupliserte raden.
I det følgende spørsmålet bruker vi en RANK-funksjon med PARTITION BY-setningen. PARTITION BY-leddet forbereder et delsett av data for de angitte kolonnene og gir rangering for den partisjonen.
I skjermbildet, du kan merke at vi må fjerne raden som har rang større enn en. La oss fjerne disse radene ved hjelp av følgende spørsmål.
Bruk SSIS-pakken til å SQL slette dupliserte rader
SQL Server-integrasjonstjeneste gir forskjellige transformasjoner, operatører som hjelper både administratorer og utviklere med å redusere manuell innsats og optimalisere oppgavene. SSIS-pakken kan også fjerne dupliserte rader fra en SQL-tabell.
Bruk Sort Operator i en SSIS-pakke for å fjerne dupliserende rader
Vi kan bruke en Sort-operator for å sortere verdiene i en SQL-tabell. Du kan spørre hvordan datasortering kan fjerne dupliserte rader?
La oss lage SSIS-pakken for å vise denne oppgaven.
- I SQL Server Data Tools oppretter du en ny integrasjonspakke.I den nye pakken legger du til en OLE DB-kildeforbindelse
-
Åpne OLE DB-kildeditor og konfigurer kildeforbindelsen og velg destinasjonstabellen
-
Klikk på Preview data, og du kan se at vi fremdeles har dupliserte data i kildetabellen
-
Legg til en sorteringsoperator fra SSIS-verktøykassen for SQL-slettingsoperasjon, og sett den sammen med kildedataene
For konfigurasjonen av sorteringsoperatøren, dobbeltklikk på den og velg kolonnene som inneholder dupliserte verdier. I vårt tilfelle er duplikatverdi i,, kolonner.
Vi kan også bruke stigende eller synkende sorteringstyper for kolonnene. Standardsorteringsmetoden er stigende. I sorteringsrekkefølgen kan vi velge kolonnesorteringsrekkefølgen. Sorteringsrekkefølge 1 viser kolonnen som skal sorteres først.
Nederst til venstre merker du en avkrysningsrute Fjern rader med dupliserte sorteringsverdier.
Det vil gjøre oppgaven med å fjerne dupliserte rader for oss fra kildedataene. La oss merke av i denne avkrysningsboksen og klikke ok. Den utfører SQL-slettingsaktiviteten i SSIS-pakken.
Når vi klikker OK, går den tilbake til dataflytfanen, og vi kan se følgende SSIS-pakke.
Vi kan legge til SQL Server-destinasjoner for å lagre data etter fjerning av dupliserte rader. Vi vil bare sjekke at sorteringsoperatøren gjør oppgaven for oss eller ikke.
Legg til en SQL Multicast-transformasjon fra SSIS-verktøykassen som vist nedenfor.
For å se de forskjellige dataene, høyreklikker du på kontakten mellom Sort og Multicast. Klikk på Aktiver dataviser.
Den samlede SSIS-pakken ser ut som nedenfor.
Utfør pakken for å utføre SQL-slettingsoperasjon. Det åpner Vis data for sortering av utdata ved dataflytoppgaven. I denne dataviseren kan du se distinkte data etter at du har fjernet duplikatverdiene.
Lukk dette og SSIS-pakken vises vellykket utført.
Konklusjon
I denne artikkelen undersøkte vi prosessen med SQL-sletting av dupliserte rader ved hjelp av forskjellige måter som T-SQL, CTE og SSIS-pakken. Du kan bruke metoden du føler deg komfortabel i. Imidlertid vil jeg foreslå å ikke implementere disse prosedyrene og pakke produksjonsdataene direkte. Du bør teste i et lavere miljø.
- Forfatter
- Nylige innlegg
Han er skaper av en av de største gratis online samlingene av artikler om et enkelt emne, med sin 50-delte serie om SQL Server Always On Availability Groups. Basert på sitt bidrag til SQL Server-fellesskapet, har han blitt anerkjent med forskjellige priser, inkludert den prestisjetunge «Årets beste forfatter» kontinuerlig i 2020 og 2021 på SQLShack.
Raj er alltid interessert i nye utfordringer, så hvis du trenger rådgivning hjelp til ethvert emne som dekkes av hans skrifter, kan du nås på [email protected]
Vis alle innlegg av Rajendra Gupta
- Utfører mindre og større versjonsoppgraderinger for AWS RDS SQL Server – 29. januar 2021
- Distribuere AWS RDS PostgreSQL-forekomster – 27. januar 2021
- Overføre lokale SQL-databaser til AWS RDS SQL Server ved hjelp av AWS DMS – 25. januar , 2021