Poniższy przykład używa T-SQL do usuwania zduplikowanych wierszy w SQL Server.
Mówiąc dokładniej, usuwa zduplikowane wiersze, ale zachowuje jeden. Więc jeśli masz dwa identyczne wiersze, usuwa jeden z nich i zachowuje drugi. Innymi słowy, usuwa duplikat tabeli.
Przykładowe dane
Załóżmy, że mamy tabelę z następującymi danymi:
SELECT * FROM Pets;
Wynik:
+---------+-----------+-----------+ | PetId | PetName | PetType | |---------+-----------+-----------| | 1 | Wag | Dog | | 1 | Wag | Dog | | 2 | Scratch | Cat | | 3 | Tweet | Bird | | 4 | Bark | Dog | | 4 | Bark | Dog | | 4 | Bark | Dog | +---------+-----------+-----------+
Widzimy, że pierwsze dwa wiersze są duplikatami, podobnie jak ostatnie trzy wiersze.
Wybierz duplikaty
Zanim usuniemy duplikat tabeli, możemy użyć następującego zapytania, aby zobaczyć, które wiersze zostaną usunięte:
WITH CTE AS
(
SELECT
*,
ROW_NUMBER() OVER (
PARTITION BY PetId, PetName, PetType
ORDER BY PetId, PetName, PetType
) AS Row_Number
FROM Pets
)
SELECT * FROM CTE WHERE Row_Number <> 1;
Wynik:
+---------+-----------+-----------+--------------+ | PetId | PetName | PetType | Row_Number | |---------+-----------+-----------+--------------| | 1 | Wag | Dog | 2 | | 4 | Bark | Dog | 2 | | 4 | Bark | Dog | 3 | +---------+-----------+-----------+--------------+
Usuń duplikaty
Aby usunąć zduplikowane wartości, możemy zmodyfikować powyższe zapytanie, zastępując SELECT *
w ostatniej linii z DELETE
:
WITH CTE AS
(
SELECT
*,
ROW_NUMBER() OVER (
PARTITION BY PetId, PetName, PetType
ORDER BY PetId, PetName, PetType
) AS Row_Number
FROM Pets
)
DELETE FROM CTE WHERE Row_Number <> 1;
Wynik:
(3 rows affected)
Tabela została usunięta z kopii.
Możemy to zweryfikować, wybierając ponownie wszystkie wiersze:
SELECT * FROM Pets;
Wynik:
+---------+-----------+-----------+ | PetId | PetName | PetType | |---------+-----------+-----------| | 1 | Wag | Dog | | 2 | Scratch | Cat | | 3 | Tweet | Bird | | 4 | Bark | Dog | +---------+-----------+-----------+
Zgodnie z oczekiwaniami, jeden ze zduplikowanych wierszy dla naszego psa „Wag” został usunięty, a drugi pozostał. Usunięto również dwa zduplikowane wiersze dla „Kora”. Tabela została pomyślnie zdeduplikowana.