Im folgenden Beispiel wird T-SQL verwendet, um doppelte Zeilen in SQL Server zu löschen.
Genauer gesagt, es löscht doppelte Zeilen, behält aber eine. Wenn Sie also zwei identische Zeilen haben, wird eine davon gelöscht und die andere beibehalten. Mit anderen Worten, es dedupliziert die Tabelle.
Beispieldaten
Angenommen, wir haben eine Tabelle mit den folgenden Daten:
SELECT * FROM Pets;
Ergebnis:
+---------+-----------+-----------+ | PetId | PetName | PetType | |---------+-----------+-----------| | 1 | Wag | Dog | | 1 | Wag | Dog | | 2 | Scratch | Cat | | 3 | Tweet | Bird | | 4 | Bark | Dog | | 4 | Bark | Dog | | 4 | Bark | Dog | +---------+-----------+-----------+
Wir können sehen, dass die ersten beiden Zeilen Duplikate sind, ebenso wie die letzten drei Zeilen.
Duplikate auswählen
Bevor wir die Tabelle deduplizieren, können wir die folgende Abfrage verwenden, um zu sehen, welche Zeile/n gelöscht werden:
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;
Ergebnis:
+---------+-----------+-----------+--------------+ | PetId | PetName | PetType | Row_Number | |---------+-----------+-----------+--------------| | 1 | Wag | Dog | 2 | | 4 | Bark | Dog | 2 | | 4 | Bark | Dog | 3 | +---------+-----------+-----------+--------------+
Duplikate löschen
Um doppelte Werte zu löschen, können wir die obige Abfrage ändern, indem wir SELECT *
ersetzen in der letzten Zeile mit 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;
Ergebnis:
(3 rows affected)
Die Tabelle wurde nun dedupliziert.
Wir können dies überprüfen, indem wir erneut alle Zeilen auswählen:
SELECT * FROM Pets;
Ergebnis:
+---------+-----------+-----------+ | PetId | PetName | PetType | |---------+-----------+-----------| | 1 | Wag | Dog | | 2 | Scratch | Cat | | 3 | Tweet | Bird | | 4 | Bark | Dog | +---------+-----------+-----------+
Wie erwartet wurde eine der doppelten Zeilen für unseren Hund „Wag“ gelöscht und die andere bleibt bestehen. Zwei der doppelten Zeilen für „Bark“ wurden ebenfalls gelöscht. Die Tabelle wurde erfolgreich dedupliziert.