- 0
- 0
- 0
- 0
- 0
- 0
Son zamanlarda, PostgreSQL’de yinelenen kayıtları silmek için bir komut dosyası için bir istek aldım. Çoğu Veritabanı Geliştiricisinin, Veritabanından yinelenen kayıtları silme gibi bir gereksinimi vardır.
SQL Server gibi, ROW_NUMBER () PARTITION BY da PostgreSQL’de mevcuttur.
Bu betiği ROW_NUMBER () PARTITION BY yan tümcesi ile basit iç sorgu kullanarak hazırladım.
Örnek bir tablo oluşturun:
CREATE TABLE tbl_RemoveDuplicate ( ID INTEGER PRIMARY KEY ,Name VARCHAR(150) );
Birkaç yinelenen kayıt ekleyin:
INSERT INTO tbl_RemoveDuplicate VALUES (1,'ABC'),(2,'XYZ') ,(3,'XYZ'),(4,'RFQ') ,(5,'PQR'),(6,'EFG') ,(7,'EFG'),(8,'ABC');
Biri dışında, tüm yinelenen kayıtları silin:
DELETE FROM tbl_RemoveDuplicate WHERE ID IN (SELECT ID FROM (SELECT id, ROW_NUMBER() OVER (partition BY Name ORDER BY ID) AS RowNumber FROM tbl_RemoveDuplicate) AS T WHERE T.RowNumber > 1);
Sonucu kontrol edin:
SELECT *FROM tbl_RemoveDuplicate; id | name ----+------ 1 | ABC 2 | XYZ 4 | RFQ 5 | PQR 6 | EFG (5 rows)