Dit artikel legt het proces uit van het uitvoeren van SQL-verwijderactiviteit voor dubbele rijen uit een SQL-tabel.
Inleiding
We moeten bepaalde best practices volgen bij het ontwerpen van objecten in SQL Server. Een tabel moet bijvoorbeeld primaire sleutels, identiteitskolommen, geclusterde en niet-geclusterde indexen hebben, beperkingen om de gegevensintegriteit en prestaties te waarborgen. Zelfs als we de best practices volgen, kunnen we problemen tegenkomen zoals dubbele rijen. We kunnen deze gegevens ook krijgen in tussenliggende tabellen bij het importeren van gegevens, en we willen dubbele rijen verwijderen voordat we ze daadwerkelijk in de productietabellen invoegen.
Stel dat uw SQL-tabel dubbele rijen bevat en u wilt die dubbele rijen verwijderen . Vaak worden we met deze problemen geconfronteerd. Het is ook een best practice om de relevante sleutels te gebruiken, beperkingen om de mogelijkheid van dubbele rijen te elimineren, maar als we al dubbele rijen in de tabel hebben. We moeten specifieke methoden volgen om dubbele gegevens op te schonen. Dit artikel onderzoekt de verschillende methoden om dubbele gegevens uit de SQL-tabel te verwijderen.
Laten we een voorbeeld van een Werknemer-tabel maken en er een paar records in invoegen.
In de tabel hebben we een weinig dubbele records, en we moeten ze verwijderen.
SQL verwijder dubbele rijen met behulp van Group By en met clausule
In deze methode gebruiken we de SQL GROUP BY-clausule om het duplicaat te identificeren rijen. De Group By-clausule groepeert gegevens volgens de gedefinieerde kolommen en we kunnen de COUNT-functie gebruiken om het voorkomen van een rij te controleren.
Voer bijvoorbeeld de volgende query uit en we krijgen die records met een voorkomen groter dan 1 in de tabel Werknemer.
In de bovenstaande uitvoer hebben we twee dubbele records met ID 1 en 3.
- Emp ID 1 komt twee keer voor in de tabel Werknemer
- Emp ID 3 komt drie keer voor in de tabel Werknemer
We moeten een enkele rij en verwijder de dubbele rijen. We hoeven alleen dubbele rijen uit de tabel te verwijderen. De EmpID 1 komt bijvoorbeeld twee keer voor in de tabel. We willen er slechts één keer van verwijderen.
We gebruiken de SQL MAX-functie om de max. Id van elke gegevensrij te berekenen.
In de volgende schermafbeelding kunnen we zien dat de above Select-instructie sluit de Max id van elke dubbele rij uit en we krijgen alleen de minimale ID-waarde.
Om deze gegevens te verwijderen, vervangt u de Selecteer eerst met de SQL-verwijderinstructie volgens de volgende query.
Nadat u de delete-instructie heeft uitgevoerd, voert u een selectie uit op een Werknemer-tabel, en we krijgen de volgende records die geen dubbele rijen bevatten.
SQL verwijdert dubbele rijen met behulp van Common Table Expressions (CTE)
We kunnen Common Table Expressions, algemeen bekend als CTE, gebruiken om dubbele rijen in SQL Server te verwijderen. Het is beschikbaar vanaf SQL Server 2005.
We gebruiken een SQL ROW_NUMBER-functie en het voegt een uniek opeenvolgend rijnummer voor de rij toe.
In de volgende CTE verdeelt het de gegevens met behulp van de PARTITION BY-clausule voor de, en kolom en genereert een rijnummer voor elke rij.
In de uitvoer, als een rij de waarde van een kolom groter dan 1 heeft, laat het zien dat het een duplicaat is row.
We kunnen de dubbele rijen verwijderen met de volgende CTE.
Het verwijdert de rijen met de waarde groter dan 1
RANK-functie om dubbele rijen te verwijderen
We kunnen de SQL RANK-functie gebruiken om ook de dubbele rijen te verwijderen. SQL RANK-functie geeft een unieke rij-ID voor elke rij, ongeacht de dubbele rij.
In de volgende query gebruiken we een RANK-functie met de PARTITION BY-clausule. De PARTITION BY-component bereidt een subset van gegevens voor voor de gespecificeerde kolommen en geeft een rangorde voor die partitie.
In de schermafbeelding, u kunt opmerken dat we de rij met een rangorde groter dan één moeten verwijderen. Laten we die rijen verwijderen met behulp van de volgende query.
Gebruik SSIS-pakket om SQL dubbele rijen te verwijderen
SQL Server-integratieservice biedt verschillende transformatieoperatoren die zowel beheerders als ontwikkelaars helpen bij het verminderen van handmatige inspanningen en optimaliseer de taken. SSIS-pakket kan de dubbele rijen ook uit een SQL-tabel verwijderen.
Gebruik Sort Operator in een SSIS-pakket voor het verwijderen van dubbele rijen
We kunnen een Sort-operator gebruiken om de waarden in een SQL-tabel. Je zou je kunnen afvragen hoe het sorteren van gegevens dubbele rijen kan verwijderen?
Laten we het SSIS-pakket maken om deze taak weer te geven.
- Maak in SQL Server Data Tools een nieuw integratiepakket.Voeg in het nieuwe pakket een OLE DB-bronverbinding toe.
-
Open de OLE DB-broneditor en configureer de bronverbinding en selecteer de doeltabel
-
Klik op Voorbeeldgegevens en je kunt zien dat we nog steeds dubbele gegevens in de brontabel hebben.
-
Voeg een sorteeroperator uit de SSIS-toolbox toe voor SQL-verwijderbewerking en voeg deze samen met de brongegevens
Voor de configuratie van de sorteeroperator, dubbelklik erop en selecteer de kolommen die dubbele waarden bevatten. In ons geval is de dubbele waarde in,, kolommen.
We kunnen ook de oplopende of aflopende sorteringstypen voor de kolommen gebruiken. De standaard sorteermethode is oplopend. In de sorteervolgorde kunnen we de sorteervolgorde van kolommen kiezen. Sorteervolgorde 1 toont de kolom die als eerste wordt gesorteerd.
Linksonder ziet u een selectievakje Verwijder rijen met dubbele sorteerwaarden.
Het zal de taak uitvoeren om dubbele rijen voor ons uit de brongegevens te verwijderen. Laten we dit selectievakje aanvinken en op ok klikken. Het voert de SQL-verwijderactiviteit uit in het SSIS-pakket.
Zodra we op OK klikken, keert het terug naar het gegevensstroomtabblad, en we kunnen het volgende SSIS-pakket zien.
We kunnen SQL Server-bestemmingen toevoegen om de gegevens op te slaan na het verwijderen van dubbele rijen. We willen alleen controleren of de sorteeroperator de taak voor ons doet of niet.
Voeg een SQL Multicast-transformatie toe vanuit de SSIS-toolbox zoals hieronder getoond.
Om de verschillende gegevens te bekijken, klikt u met de rechtermuisknop op de connector tussen Sort en Multicast. Klik op Enable Data Viewer.
Het algehele SSIS-pakket ziet er als volgt uit.
Voer het pakket uit om een SQL-verwijderbewerking uit te voeren. Het opent de Sorteer uitvoergegevensviewer bij de Gegevensstroomtaak. In deze gegevensviewer kunt u verschillende gegevens zien nadat u de dubbele waarden heeft verwijderd.
Sluit dit en het SSIS-pakket wordt weergegeven uitgevoerd.
Conclusie
In dit artikel hebben we het proces van SQL onderzocht om dubbele rijen te verwijderen met verschillende manieren, zoals T-SQL, CTE en SSIS-pakket. U kunt de methode gebruiken waarin u zich op uw gemak voelt. Ik zou echter willen voorstellen om deze procedures en het pakket niet rechtstreeks op de productiegegevens te implementeren. U moet testen in een lagere omgeving.
- Auteur
- Recente berichten
Hij is de maker van een van de grootste gratis online verzamelingen artikelen over één onderwerp, met zijn 50-delige serie over SQL Server Always On Availability Groups. Op basis van zijn bijdrage aan de SQL Server-gemeenschap, is hij bekroond met verschillende prijzen, waaronder de prestigieuze “Beste auteur van het jaar”, continu in 2020 en 2021 bij SQLShack.
Raj is altijd geïnteresseerd in nieuwe uitdagingen, dus als je advies nodig hebt hulp bij elk onderwerp dat in zijn geschriften aan bod komt, hij is te bereiken op [email protected]
Bekijk alle berichten van Rajendra Gupta
- Kleine en grote versie-upgrades uitvoeren voor AWS RDS SQL Server – 29 januari 2021
- Implementatie van AWS RDS PostgreSQL-instances – 27 januari 2021
- Migratie van uw lokale SQL-databases naar AWS RDS SQL Server met behulp van AWS DMS – 25 januari , 2021