Merhaba Arkadaşlar ,
Tekrar eden kayıtları silme adlı makale serimin 2. sini sizlerle paylaşıyorum. Burada 1. Yöntemin tersine daha farklı bir yöntemle duplicate yani tekrar eden kayıtları silme işlemi uygulayacağız.
Bu sorunun cevabına geçmeden önce ;
Bir test tablosu ve içerisine de bir den fazla aynı kayıt basılmış bir veri bloğu lazım.
Test tablomuzu ve içerisine basacağımız verinin scriptini aşağıda sizlerle paylaşmaktayım.
--Test DB 'si oluşturma ... CREATE DATABASE SQLTURKIYE; GO -- Test Tablomuzu oluşturuyoruz. CREATE TABLE DuplicateTable2 ( Identity_Number CHAR(11) , Name VARCHAR(50) , SurName VARCHAR(75) ); GO --Tablomuza veri basalım ... INSERT INTO DuplicateTable2 VALUES ( '11111111111', 'Yusuf', 'Kahveci' ); INSERT INTO DuplicateTable2 VALUES ( '22222222222', 'Yaşar', 'Kahveci' ); INSERT INTO DuplicateTable2 VALUES ( '11111111111', 'Yusuf', 'Kahveci' ); INSERT INTO DuplicateTable2 VALUES ( '22222222222', 'Yaşar', 'Kahveci' );
Tablomuzun içerisindeki dataları kontrol edecek olursak.
SELECT * FROM DuplicateTable2;
Amacımız yukarıdada gördüğümüz gibi tekrar eden kayıtları silmektir. Aynı TC Kimlik Numarasına sahip olan kullanıcıları silmek istersek ;
WITH DuplicaTe ( Identity_Number, Total_Count ) AS ( SELECT Identity_Number , ROW_NUMBER() OVER ( PARTITION BY Identity_Number ORDER BY Name ) AS Total_Count FROM DuplicateTable2 ) SELECT * FROM DuplicaTe WHERE Total_Count > 1;
Yukarıda ki Script ile aynı TC Kimlik numarasına sahip kaçar kişi var bu bilgiye erişip. Bunun akabinde de silme işlemini gerçekleştirebiliriz.
Yukarıda ki ekran görüntüsünde yer alan TC Kimlik numaralardan ikişer tane yer almaktadır. bunlardan birtanesini silmemiz gerekmektedir.
WITH DuplicaTe ( Identity_Number, Total_Count ) AS ( SELECT Identity_Number , ROW_NUMBER() OVER ( PARTITION BY Identity_Number ORDER BY Name ) AS Total_Count FROM DuplicateTable2 ) DELETE FROM DuplicaTe WHERE Total_Count > 1;
Yukarıda ki Script ile silme işlemini gerçekleştirerek tablomuzun içerisinde ki data bilgilerini kontrol edebiliriz.
SELECT * FROM DuplicateTable2;
Tekrarlayan Kayıtları bunların dışında bir çok yöntemlede temizleyebirlisiniz. Bunun akabinde Cursor mantığı vb. tarzda kullanarak row row kontrol şeklinde DELTE işlemlerini sağlayabilirsiniz fakat Cursor yöntemini diğer yöntemlere göre tavsiye etmiyorum . Performans açısından.
Tekrarlayan ( Duplicate) kayıtları Silme Yöntemleri Makale serim bu kadar.
İyi Çalışmalar.