SQLShack (Polski)

W tym artykule opisano ten proces wykonywania czynności usuwania SQL dla zduplikowanych wierszy z tabeli SQL.

Wprowadzenie

Podczas projektowania obiektów w SQL Server powinniśmy przestrzegać pewnych najlepszych praktyk. Na przykład tabela powinna mieć klucze podstawowe, kolumny tożsamości, indeksy klastrowe i nieklastrowe, ograniczenia zapewniające integralność danych i wydajność. Nawet jeśli postępujemy zgodnie z najlepszymi praktykami, możemy napotkać problemy, takie jak zduplikowane wiersze. Możemy również uzyskać te dane w tabelach pośrednich podczas importu danych i chcemy usunąć zduplikowane wiersze przed faktycznym wstawieniem do tabel produkcyjnych.

Załóżmy, że Twoja tabela SQL zawiera zduplikowane wiersze i chcesz usunąć te zduplikowane wiersze . Wielokrotnie mamy do czynienia z tymi problemami. Dobrą praktyką jest również użycie odpowiednich kluczy, ograniczenia w celu wyeliminowania możliwości zduplikowania wierszy, jednak jeśli mamy już zduplikowane wiersze w tabeli. Musimy zastosować określone metody, aby usunąć zduplikowane dane. W tym artykule omówiono różne metody usuwania zduplikowanych danych z tabeli SQL.

Utwórzmy przykładową tabelę Employee i wstaw do niej kilka rekordów.

W tabeli mamy kilka zduplikowanych rekordów i musimy je usunąć.

SQL usuwa zduplikowane wiersze za pomocą klauzuli Group By i posiadającej klauzulę

W tej metodzie używamy klauzuli SQL GROUP BY do identyfikacji duplikatu wydziwianie. Klauzula Group By grupuje dane zgodnie ze zdefiniowanymi kolumnami i możemy użyć funkcji COUNT, aby sprawdzić wystąpienie wiersza.

Na przykład wykonaj następujące zapytanie i otrzymamy te rekordy, których wystąpienie jest większe niż 1 w tabeli Employee.

W powyższym wyniku mamy dwa zduplikowane rekordy o identyfikatorach 1 i 3.

  • Emp ID 1 ma dwa wystąpienia w tabeli Employee
  • Emp ID 3 ma trzy wystąpienia w tabeli Employee

Wymagamy zachowania jeden wiersz i usuń zduplikowane wiersze. Musimy usunąć tylko zduplikowane wiersze z tabeli. Na przykład EmpID 1 pojawia się w tabeli dwa razy. Chcemy usunąć tylko jedno jego wystąpienie.

Używamy funkcji SQL MAX do obliczenia maksymalnego identyfikatora każdego wiersza danych.

Na poniższym zrzucie ekranu widzimy, że powyższa instrukcja Select wyklucza maksymalny identyfikator każdego zduplikowanego wiersza i otrzymujemy tylko minimalną wartość identyfikatora.

Aby usunąć te dane, zastąp najpierw Wybierz za pomocą instrukcji SQL delete zgodnie z następującym zapytaniem.

Po wykonaniu instrukcji delete, dokonaj wyboru w tabeli Employee, a otrzymamy następujące rekordy, które nie zawierają zduplikowanych wierszy.

SQL usuwa zduplikowane wiersze przy użyciu wspólnych wyrażeń tabelowych (CTE)

Możemy użyć wspólnych wyrażeń tabelowych, powszechnie znanych jako CTE, do usunięcia zduplikowanych wierszy w SQL Server. Jest dostępny począwszy od SQL Server 2005.

Używamy funkcji SQL ROW_NUMBER i dodaje ona unikalny kolejny numer wiersza.

W następującym CTE dzieli dane przy użyciu klauzuli PARTITION BY dla kolumny i i generuje numer wiersza dla każdego wiersza.

W wyniku, jeśli którykolwiek wiersz ma wartość kolumny większą niż 1, pokazuje, że jest to duplikat wiersz.

Możemy usunąć zduplikowane wiersze, używając następującego CTE.

Usuwa wiersze o wartości większej niż 1

Funkcja RANK do SQL usuwa zduplikowane wiersze

Możemy również użyć funkcji SQL RANK do usunięcia zduplikowanych wierszy. Funkcja SQL RANK podaje unikalny identyfikator wiersza dla każdego wiersza, niezależnie od tego, który wiersz jest zduplikowany.

W poniższym zapytaniu używamy funkcji RANK z klauzulą PARTITION BY. Klauzula PARTITION BY przygotowuje podzbiór danych dla określonych kolumn i nadaje rangę tej partycji.

Na zrzucie ekranu, możesz zauważyć, że musimy usunąć wiersz mający rangę większą niż jeden. Usuńmy te wiersze za pomocą następującego zapytania.

Użyj pakietu SSIS, aby usunąć zduplikowane wiersze w języku SQL

Usługa integracji SQL Server zapewnia różne transformacje, operatory, które pomagają zarówno administratorom, jak i programistom w zmniejszaniu ręcznego wysiłku i zoptymalizuj zadania. Pakiet SSIS może również usunąć zduplikowane wiersze z tabeli SQL.

Użyj operatora sortowania w pakiecie SSIS, aby usunąć zduplikowane wiersze

Możemy użyć operatora sortowania, aby posortować wartości w tabela SQL. Możesz zapytać, jak sortowanie danych może usunąć zduplikowane wiersze?

Utwórzmy pakiet SSIS, aby pokazać to zadanie.

  • W SQL Server Data Tools utwórz nowy pakiet integracyjny.W nowym pakiecie dodaj połączenie źródłowe OLE DB
  • Otwórz edytor źródeł OLE DB i skonfiguruj połączenie źródłowe i wybierz tabelę docelową

  • Kliknij Podgląd danych i widzisz, że nadal mamy zduplikowane dane w tabeli źródłowej

  • Dodaj operator sortowania z zestawu narzędzi SSIS do operacji usuwania SQL i połącz go z danymi źródłowymi

Aby skonfigurować operator Sort, kliknij go dwukrotnie i wybierz kolumny, które zawierają zduplikowane wartości. W naszym przypadku zduplikowana wartość znajduje się w kolumnach,,.

Możemy również użyć sortowania rosnącego lub malejącego dla kolumn. Domyślna metoda sortowania jest rosnąca. W kolejności sortowania możemy wybrać kolejność sortowania kolumn. Porządek sortowania 1 pokazuje kolumnę, która zostanie posortowana jako pierwsza.

W lewym dolnym rogu znajduje się pole wyboru Usuń wiersze z zduplikowane wartości sortowania.

Spowoduje to usunięcie za nas zduplikowanych wierszy z danych źródłowych. Zaznaczmy to pole wyboru i kliknij OK. Wykonuje działanie SQL delete w pakiecie SSIS.

Po kliknięciu OK powraca do karty przepływu danych, i widzimy następujący pakiet SSIS.

Po usunięciu zduplikowanych wierszy możemy dodać miejsca docelowe SQL Server do przechowywania danych. Chcemy tylko sprawdzić, czy operator sortowania wykonuje zadanie za nas, czy nie.

Dodaj transformację SQL Multicast z zestawu narzędzi SSIS, jak pokazano poniżej.

Aby wyświetlić odrębne dane, kliknij prawym przyciskiem myszy łącznik między sortowaniem a multiemisją. Kliknij Włącz przeglądarkę danych.

Cały pakiet SSIS wygląda jak poniżej.

Uruchom pakiet, aby wykonać operację usuwania SQL. Otwiera przeglądarkę danych wyjściowych sortowania w zadaniu Przepływ danych. W tej przeglądarce danych można zobaczyć odrębne dane po usunięciu zduplikowanych wartości.

Zamknij to, a pakiet SSIS wyświetli się pomyślnie

Wniosek

W tym artykule omówiliśmy proces usuwania zduplikowanych wierszy za pomocą SQL różne sposoby, takie jak pakiet T-SQL, CTE i SSIS. Możesz skorzystać z metody, w której czujesz się komfortowo. Sugerowałbym jednak, aby nie wdrażać tych procedur i bezpośrednio pakietować na danych produkcyjnych. Powinieneś przetestować w niższym środowisku.

  • Autor
  • Najnowsze posty
Jako certyfikowany przez MCSA i certyfikowany trener Microsoft w Gurgaon w Indiach, z 13-letnim doświadczeniem, Rajendra pracuje dla różnych dużych firm, koncentrując się na optymalizacji wydajności, monitorowaniu, wysokiej dostępności oraz strategiach i wdrażaniu odzyskiwania po awarii. Jest autorem setek autorytatywnych artykułów na temat SQL Server, Azure, MySQL, Linux, Power BI, Performance Tuning, AWS / Amazon RDS, Git i powiązanych technologii, które do tej pory obejrzało ponad 10 milionów czytelników.
Jest twórcą jednej z największych bezpłatnych kolekcji artykułów online na jeden temat, obejmującej 50-częściową serię na temat grup dostępności SQL Server Always On. Dzięki swojemu wkładowi w społeczność SQL Server, został wyróżniony wieloma nagrodami, w tym prestiżową nagrodą „Najlepszy autor roku” w SQLShack w latach 2020 i 2021.
Raj jest zawsze zainteresowany nowymi wyzwaniami, więc jeśli potrzebujesz konsultacji pomoc na każdy temat poruszony w jego pismach, można się z nim skontaktować pod adresem [email protected]
Wyświetl wszystkie posty Rajendry Gupty

Najnowsze posty Rajendry Gupty (zobacz wszystkie)
  • Wykonywanie drobnych i głównych aktualizacji wersji AWS RDS SQL Server – 29 stycznia 2021
  • Wdrażanie wystąpień AWS RDS PostgreSQL – 27 stycznia 2021
  • Migracja lokalnych baz danych SQL do AWS RDS SQL Server przy użyciu AWS DMS – 25 stycznia , 2021

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *