Contoh berikut menggunakan T-SQL untuk menghapus baris duplikat di SQL Server.
Untuk lebih spesifik, ini menghapus baris duplikat tetapi menyimpannya. Jadi, jika Anda memiliki dua baris yang identik, itu akan menghapus salah satunya dan menyimpan yang lain. Dengan kata lain, ini menghilangkan penipuan di meja.
Contoh Data
Misalkan kita memiliki tabel dengan data berikut:
SELECT * FROM Pets;
Hasil:
+---------+-----------+-----------+ | PetId | PetName | PetType | |---------+-----------+-----------| | 1 | Wag | Dog | | 1 | Wag | Dog | | 2 | Scratch | Cat | | 3 | Tweet | Bird | | 4 | Bark | Dog | | 4 | Bark | Dog | | 4 | Bark | Dog | +---------+-----------+-----------+
Kita dapat melihat bahwa dua baris pertama adalah duplikat, seperti halnya tiga baris terakhir.
Pilih Duplikat
Sebelum kita melakukan de-dupe tabel, kita dapat menggunakan query berikut untuk melihat baris mana yang akan dihapus:
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;
Hasil:
+---------+-----------+-----------+--------------+ | PetId | PetName | PetType | Row_Number | |---------+-----------+-----------+--------------| | 1 | Wag | Dog | 2 | | 4 | Bark | Dog | 2 | | 4 | Bark | Dog | 3 | +---------+-----------+-----------+--------------+
Hapus Duplikat
Untuk menghapus nilai duplikat, kita dapat mengubah kueri di atas dengan mengganti SELECT *
pada baris terakhir dengan 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;
Hasil:
(3 rows affected)
Tabel sekarang telah ditipu.
Kami dapat memverifikasi ini dengan memilih semua baris lagi:
SELECT * FROM Pets;
Hasil:
+---------+-----------+-----------+ | PetId | PetName | PetType | |---------+-----------+-----------| | 1 | Wag | Dog | | 2 | Scratch | Cat | | 3 | Tweet | Bird | | 4 | Bark | Dog | +---------+-----------+-----------+
Seperti yang diharapkan, salah satu baris duplikat untuk anjing kami "Wag" telah dihapus dan yang lainnya tetap ada. Dua baris duplikat untuk "Bark" juga telah dihapus. Tabel telah berhasil ditipu.