Sql Server Duplicate Kayıtların Silinmesi
Sqlde bazı tablolarda kayıt tekrarı oluşabilir yazılımdan gelen kayıtlarda olabilir, sqlde atılan insertten kaynaklı olabilir bu tekrarlayan alanların silinmesi gereklidir.
Burada farklı methodlar yürütülebilinir , duplicate kayıtları başka bir temp tabloya aldıktan sonra tablodan silip tekrar insert edebilirsiniz veya şuan göreceğimiz giri WITH ile duplicate kayıtları elde edip verileri silebilirsiniz.
Burada hangi alanlardan tekrarlayan verilere göre satır numaralarını elde edelim ,
SELECT contact_id, first_name, last_name, email, ROW_NUMBER() OVER ( PARTITION BY first_name, last_name, email ORDER BY first_name, last_name, email ) row_num FROM contacts burada ROW_NUMBER() ile isim,soyisim ve mail adresine göre her satıra bir satır numarası değeri verdik böylece duplicate olan kayıtların satırları 1,2,3... şeklinde devam edecektir. Bu noktada istenirse bir alt query'e alınarak satır numarası 1'den büyük olanları sil de diyebilirsiniz veya WITH ile kaydı alıp bu şekilde de kayıtları silebilirsiniz bu iki işlemde aynı sonuca ulaşacaktır. WITH cte AS ( SELECT contact_id, first_name, last_name, email, ROW_NUMBER() OVER ( PARTITION BY first_name, last_name, email ORDER BY first_name, last_name, email ) row_num FROM contacts ) DELETE FROM cte WHERE row_num > 1;