Najlepsze praktyki projektowania baz danych zalecają stosowanie ograniczenia UNIQUE w celu zapobiegania duplikatom w bazie danych. Jednak podczas pracy ze źle zaprojektowaną bazą danych lub nieczystymi danymi może być konieczne samodzielne znalezienie duplikatów i ręczne ich usunięcie.
Czytaj dalej, aby dowiedzieć się, jak znaleźć duplikaty w bazie danych SQL i jak je usunąć.
Utwórz przykładową bazę danych
W celach demonstracyjnych utwórz tabelę o nazwie Użytkownicy z kolumną nazwy i wyniku, uruchamiając to zapytanie SQL.
UPUSZCZAĆTABELAJEŚLIISTNIEJEUżytkownicy;
TWORZYĆTABELAUżytkownicy (
pk_id int GŁÓWNY KLUCZ,
imię VARCHAR (16),
wynik INT,
);
Wstaw kilka przykładowych wartości, uruchamiając to zapytanie:
WSTAWIĆDO
Użytkownicy (pk_id, nazwa, wynik)
WARTOŚCI
(1, „Jane”, 20),
(2, 'Jan', 13),
(3, „Aleks”, 32),
(4, 'Jan', 46),
(5, „Jane”, 20),
(6, „Maryja”, 34),
(7, „Jane”, 20),
(8, 'Jan', 13)
Zwróć uwagę, że niektóre z tych wierszy zawierają zduplikowane wartości dla kolumny nazwy.
Zapraszamy do zapoznania się z nimi Polecenia i zapytania SQL jeśli potrzebujesz bardziej szczegółowego wyjaśnienia, jak manipulować bazami danych za pomocą SQL.
Używanie GROUP BY do znajdowania zduplikowanych wartości
Możesz użyj instrukcji GROUP BY do uporządkowania wartości które spełniają określone warunki w tej samej grupie.
Powiedzmy, że nazwy w przykładowej tabeli muszą być unikalne. Możesz użyć GROUP BY, aby pogrupować wiersze o tej samej nazwie.
WYBIERAĆnazwa, LICZYĆ(nazwa)
OD użytkowników
GRUPUJ WEDŁUG nazwy
MAJĄC LICZBĘ (nazwa) > 1
LICZBA pozwala wybrać wiersze, które mają więcej niż jednego użytkownika o tej samej nazwie.
Po uruchomieniu tego zapytania baza danych zwróci wiersze zawierające John i Jane jako duplikaty.
Usuwanie duplikatów z bazy danych
Po znalezieniu duplikatów możesz chcieć je usunąć za pomocą instrukcji DELETE.
W tym przykładzie uruchom następujące zapytanie:
Z cte JAK (
WYBIERAĆ *
ROW_NUMBER() PONAD (
PODZIAŁ WEDŁUG
imię, wynik
ZAMÓW PRZEZ
imię, wynik
) R
Z
Użytkownicy
)
USUWAĆZ cte
GDZIE R > 1;
To zapytanie używa wyrażenia CTE, aby znaleźć duplikaty, a następnie usuwa je wszystkie z wyjątkiem jednego.
Dlaczego warto usunąć zduplikowane dane
Usuwanie zduplikowanych danych nie jest koniecznością. Pozwala jednak zwolnić miejsce używane przez zduplikowane wiersze.
Mniej wierszy oznacza również, że zapytania mogą być wykonywane znacznie szybciej, co prowadzi do wyższej wydajności. Skorzystaj z zapytań w tym samouczku, aby znaleźć i usunąć duplikaty z bazy danych SQL.