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;
Paylaş

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.