İlginizi Çekebilir
  1. Ana Sayfa
  2. SQL

SQL Mükerrer Kayıtlar Bulmak ve Silmek

SQL Mükerrer Kayıtlar Bulmak ve Silmek
+ - 4

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. ?

 

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)

Yorumlar (4)

  1. 5 sene önce

    Teşekkürler işime yaradı.

  2. 2 sene önce

    Çok teşekkürler faydalı paylaşımınız için

Bir cevap yazın

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