Denna artikel förklarar processen för att utföra SQL-borttagningsaktivitet för dubbla rader från en SQL-tabell.
Inledning
Vi bör följa vissa bästa metoder när vi utformar objekt i SQL Server. Till exempel bör en tabell ha primära nycklar, identitetskolumner, klustrade och icke-klustrade index, begränsningar för att säkerställa dataintegritet och prestanda. Även vi följer de bästa metoderna och vi kan möta problem som dubbla rader. Vi kan också få dessa data i mellanliggande tabeller vid dataimport, och vi vill ta bort dubbla rader innan vi faktiskt infogar dem i produktionstabellerna.
Antag att din SQL-tabell innehåller dubbla rader och du vill ta bort de dubbla raderna . Många gånger står vi inför dessa problem. Det är också en bra praxis att använda relevanta nycklar, begränsningar för att eliminera möjligheten till dubbla rader, men om vi redan har dubbletterader i tabellen. Vi måste följa specifika metoder för att rensa dubbla data. Den här artikeln utforskar de olika metoderna för att ta bort dubblettdata från SQL-tabellen.
Låt oss skapa ett exempel på anställdstabell och infoga några poster i den.
I tabellen har vi en några dubbla poster, och vi måste ta bort dem.
SQL radera dubbletterader med Group By och ha sats
I den här metoden använder vi SQL GROUP BY-satsen för att identifiera dubbletten rader. Group By-satsen grupperar data enligt de definierade kolumnerna och vi kan använda COUNT-funktionen för att kontrollera förekomsten av en rad.
Till exempel, utför följande fråga och vi får de poster som har förekomst större än 1 i tabellen medarbetare.
I utgången ovan har vi två dubbletter med ID 1 och 3.
- Emp ID 1 har två förekomster i tabellen Anställda
- Emp ID 3 har tre förekomster i tabellen Anställda
Vi behöver behålla en rad och ta bort dubbletteraderna. Vi behöver bara ta bort dubbla rader från tabellen. Till exempel visas EmpID 1 två gånger i tabellen. Vi vill bara ta bort en förekomst av den.
Vi använder SQL MAX-funktionen för att beräkna max-id för varje datarad.
I följande skärmdump kan vi se att ovan Välj uttalande exkluderar Max-id för varje duplicerad rad och vi får bara det minsta ID-värdet.
För att ta bort dessa data, ersätt välj först med SQL-borttagningsuttalandet enligt följande fråga.
När du har tagit bort borttagningsuttrycket, utför ett val i en anställdstabell så får vi följande poster som inte innehåller dubbletterader.
SQL tar bort dubbletterader med Common Table Expressions (CTE)
Vi kan använda Common Table Expressions, allmänt kända som CTE, för att ta bort dubbletterader i SQL Server. Den är tillgänglig från och med SQL Server 2005.
Vi använder en SQL ROW_NUMBER-funktion och den lägger till ett unikt sekventiellt radnummer för raden.
I följande CTE partitionerar den data som använder PARTITION BY-satsen för kolumnen och genererar ett radnummer för varje rad.
Om någon rad har kolumnvärdet större än 1 i utgången visar det att det är en duplikat rad.
Vi kan ta bort dubbletteraderna med följande CTE.
Det tar bort raderna med värdet större än 1
RANK-funktion för att SQL ska ta bort dubbletterader
Vi kan också använda SQL RANK-funktionen för att ta bort dubbletteraderna. SQL RANK-funktionen ger unikt rad-ID för varje rad oavsett den dubbla raden.
I följande fråga använder vi en RANK-funktion med PARTITION BY-satsen. PARTITION BY-klausulen förbereder en delmängd av data för de angivna kolumnerna och ger rang för den partitionen.
I skärmdumpen, du kan notera att vi måste ta bort raden med en rang som är större än en. Låt oss ta bort dessa rader med hjälp av följande fråga.
Använd SSIS-paketet för att radera SQL-dubbletterader
SQL Server-integreringstjänsten tillhandahåller olika transformationer, operatörer som hjälper både administratörer och utvecklare att minska manuell ansträngning och optimera uppgifterna. SSIS-paketet kan också ta bort dubbletteraderna från en SQL-tabell.
Använd sorteringsoperatören i ett SSIS-paket för att ta bort duplicerande rader
Vi kan använda en sorteringsoperatör för att sortera värdena i en SQL-tabell. Du kanske frågar hur datasortering kan ta bort dubbla rader?
Låt oss skapa SSIS-paketet för att visa den här uppgiften.
- I SQL Server Data Tools skapar du ett nytt integrationspaket.Lägg till en OLE DB-källanslutning i det nya paketet
-
Öppna OLE DB-källredigeraren och konfigurera källanslutningen och välj destinationstabellen
-
Klicka på Förhandsgranska data så ser du att vi fortfarande har dubbla data i källtabellen
-
Lägg till en sorteringsoperator från SSIS-verktygslådan för SQL-radering och koppla den till källdata
För konfigurationen av sorteringsoperatören dubbelklickar du på den och väljer de kolumner som innehåller dubbla värden. I vårt fall finns det dubbla värdet i,, kolumner.
Vi kan också använda de stigande eller fallande sorteringstyperna för kolumnerna. Standardsorteringsmetoden är stigande. I sorteringsordningen kan vi välja kolumnens sorteringsordning. Sorteringsordning 1 visar kolumnen som kommer att sorteras först.
Längst ner till vänster märker du en kryssruta Ta bort rader duplicera sorteringsvärden.
Det kommer att göra uppgiften att ta bort dubbletterader för oss från källdata. Låt oss kryssa i den här kryssrutan och klicka på ok. Det utför SQL-borttagningsaktiviteten i SSIS-paketet.
När vi klickar på OK återgår det till dataflödet, och vi kan se följande SSIS-paket.
Vi kan lägga till SQL Server-destinationer för att lagra data efter att dubbla rader har tagits bort. Vi vill bara kontrollera att sorteringsoperatören gör uppgiften för oss eller inte.
Lägg till en SQL Multicast-omvandling från SSIS-verktygslådan enligt nedan.
För att visa distinkta data, högerklicka på kontakten mellan Sort och Multicast. Klicka på Enable Data Viewer.
Det totala SSIS-paketet ser ut nedan.
Kör paketet för att utföra SQL-radering. Det öppnar Visningsdata för sorteringsdata vid dataflödesuppgiften. I den här datavisaren kan du se distinkta data efter att du har tagit bort de dubbla värdena.
Stäng detta och SSIS-paketet visas framgångsrikt körs.
Slutsats
I den här artikeln undersökte vi processen för SQL-radering av duplicerade rader med olika sätt som T-SQL, CTE och SSIS-paket. Du kan använda den metod där du känner dig bekväm. Jag föreslår dock att du inte implementerar dessa procedurer och paketerar direkt i produktionsdata. Du bör testa i en lägre miljö.
- Författare
- Senaste inlägg
Han är skaparen av en av de största gratis onlinesamlingarna av artiklar om ett enda ämne, med sin 50-delarserie om SQL Server Always On Availability Groups. Baserat på sitt bidrag till SQL Server-communityn har han fått utmärkelser med olika utmärkelser inklusive den prestigefyllda ”Årets bästa författare” kontinuerligt 2020 och 2021 på SQLShack.
Raj är alltid intresserad av nya utmaningar så om du behöver rådgivning hjälp om alla ämnen som omfattas av hans skrifter, han kan nås på [email protected]
Visa alla inlägg av Rajendra Gupta
- Utför mindre och större versionuppgraderingar för AWS RDS SQL Server – 29 januari 2021
- Distribuera AWS RDS PostgreSQL-instanser – 27 januari 2021
- Migrera dina lokala SQL-databaser till AWS RDS SQL Server med AWS DMS – 25 januari 2021