SQL Mükerrer Kayıtlar Bulmak ve Silmek, yazım ile sql eğitim setime devam ediyorum. Bu yazımda tablolalarımızdaki mükerrer kayıtları nasıl bulabileceğimizi ve silebileceğimizi göstereceğim.
SQL Mükerrer Kayıtlar Bulmak ve Silmek
Mükerrer kayıtlar her zaman başımıza bela olmuştur ve hep bizlere sorun çıkartmışlardır. Bu yazımızda da bu sorunun önüne nasıl geçeceğimizi göreceğiz. Aslında önüne geçmek değil de nasıl temizleyeceğimizi göreceğiz. Mükerrer kayıtları engellemek pek mümkün olmuyor. Yani tablolara index ‘ler versek bile indexli kolonlar hariç kalan diğer kolonlar mükerrer çıkabilir. Yada kayıt işlemini yapmadan önce girilen kayıtlar ile aynısı olan kayıt varmı kontrolü gibi kontroller ile önüne geçmeye çalışabiliriz.
Yol I – SQL Mükerrer Kayıtlar Bulmak ve Silmek
Şimdi SQL de mükerrer kayıtları nasıl bulacağımızı görelim.
Select Kolon_Adi, Count(Kolon_Adi) From Tablo_Adi Group By Kolon_Adi Having Count (Kolon_Adi) > 1
Bu sorgu bize Kolon_Adi verileri aynı olan verileri gösterecektir. Ama bunları silerken sorun yaşayabiliriz. Bu sebeple geçici olarak da olsa kolona bir ID kolonu ekleyip, primary key yapalım ve 1,1 otomatik artan olarak ayarlayalım. Sonraki işlem olarak da yukarıdaki sorgumuzu düzenleyelim.
Select Kolon_Adi as KLN, Count(Kolon_Adi) as ADET , MAX(ID) as ID From Tablo_Adi Group By Kolon_Adi Having Count (Kolon_Adi) > 1
Şimdi, bu şekilde mükerrer kolonlarımızı bulmuş olduk. Bu kayıtları silmek istiyor isek nasıl sileceğimize bakalım.
Silme konusunda birden fazla örnek vereceğim.
Öncelikle yukarıdaki örneğimize göre bir silme işlemi yapalım.
NOT: Burada mükerrer kayıt olarak 2 mükerrer kayıt olarak düşünülür. Mükerrer kayıtlar 2 ‘den fazlaysa aşağıdaki silme işlemini kayıt kalmayana kadar tekrar tekrar çalıştırın.
Delete from Tablo_Adi where ID in ( Select MAX(ID) as ID From Tablo_Adi Group By Kolon_Adi Having Count (Kolon_Adi) > 1 ) Select Kolon_Adi as KLN, Count(Kolon_Adi) as ADET , MAX(ID) as ID From Tablo_Adi Group By Kolon_Adi Having Count (Kolon_Adi) > 1
Örnekte gördüğünüz gibi DELETE işleminde where ID in ( ) dedik… Çünkü select sorgumuz bize mükerrer olan kayıtların 2. lerini yani mükerrer olanlarının ID’lerini veriyor. Nereden biliyoruz mükerrer olduklarını… Çünkü ilk kayıt gerçek, ikinci ve diğer kayıtlar mükerrer olarak anılır. Mantıken düşünürseniz, ilk girilen kayıt, sonradan girilen kaydın mükerreri olamaz değil mi? İkinci girilen kayıt, ilk girilen kaydın mükerreri olur. Yani ilk girilen orjinal ise, sonra girilen sahte olur. Mantık budur.
Burada kayıtlar iki tane ise ikinci girilenleri, üç tane ise üçüncü girilenleri silinir. Mükerrer olanlar silindikten sonra bir select sorgusu ile kalan mükerrerleri göreceğiz. Hiçbir kayıt gelmediyse mükerrerler temizlenmiş demektir. Hala kayıt varsa da, gelen kayıtlar 2. mükerrer demektir. Yani aynı kayıttan 3 tane varmış…
Yol II – SQL Mükerrer Kayıtlar Silmek
SQL Mükerrer Kayıtlar Bulmak ve Silmek işlemi bu kadardı. Ben hiç bakmayım sileyim derseniz de bir kaç farklı yöntem daha var.
Burada vereceğim yöntem yukarıdaki yöntemin tersi diyebilirim.
Delete From Tablo_Adi Where ID Not In ( Select MIN(ID) From Tablo_Adi Group By Kolon1, Kolon2, Kolon3 )
Buradaki örnekte, mükerrer olmasını sağlayan her bir kolonu Group By kısmına yazmalısınız. Burada yukarıdaki örnekteki gibi mükerrer olanları görmezsiniz.
Şöyle ki,
Select MIN(ID) , Kolon1, Kolon2, Kolon3 From Tablo_Adi Group By Kolon1, Kolon2, Kolon3
Bu sorguyu çalıştırdığınızda, Kolon1, Kolon2, Kolon3 adlı kolonlarında göre tüm tabloyu gruplamış olursunuz. ID kolonu gruplanamayacağı için, bulunan kayıtlar arasında mükerrer olanların en küçük ID’sini aldık. Kaç tane mükerrer olursa olsun tek satır olarak görünecektir. Şimdi az yukarıda ne demiştik, ilk örneğe göre tersten işlem yapan demiştik. Neden böyle dedik ona bakalım.
Select sorgumuzda, orjinal kayıtların recnolarını aldık MIN(ID) diyerek. Bu sorguya göre delete işlemini tekrar görelim.
Delete From Tablo_Adi Where ID Not In ( Select MIN(ID) From Tablo_Adi Group By Kolon1, Kolon2, Kolon3 )
Where ID Not In () kısmına dikkat edin. Burada ekranda gördüğümüz ID’ler dışında kalan tüm kayıtlar silinecektir. Yani mükerrer tüm kayıtları silecek.
İlk yöntemimizde, orjinallere dokunmayıp mükerrerlere odaklanıyorduk.
İkinci yöntemimizde ise orjinallere odaklaıp, orjinaller haricinde kalan tüm kayıtları siliyoruz.
Umarım farkı doğru bir şekilde anlatabilmişimdir.
SQL Mükerrer Kayıtlar Bulmak ve Silmek , yazımda bu kadardı dostlar, diğer derslerimizde görüşmek üzere.
Microsoft SQL Server & T-SQL Eğitim Seti ders listesi için tıklayınız.
Sağlıcakla ve Takipte Kalın.
Teşekkürler işime yaradı.
Faydalı olabilmesine sevindim. Teşekkürler yorumunuz için. Kolay gelsin.
Çok teşekkürler faydalı paylaşımınız için
Rica ederim. Faydalı olmasına sevindim ^^