SQL Mükerrer Kayıtlar Bulmak ve Silmek

SQL Mükerrer Kayıtlar Bulmak ve Silmek

8 Kasım 2018 0 Yazar: Mustafa BÜKÜLMEZ
Toplam Görüntülenme : 47
Yaklaşık okuma süresi : 4 DK
SQL Server Database Listesi Almak
SQL Pivot Kullanımı
SQL Mükerrer Kayıtlar Bulmak ve Silmek
5 (100%) 1 Oy

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.

İlgili İçerik  SQL Order By Komutu - Verileri Sıralama

 

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.

İlgili İçerik  SQL Attach Database - Veritabanı Ekleme

Microsoft SQL Server & T-SQL Eğitim Seti ders listesi için tıklayınız.

Sağlıcakla ve Takipte Kalın. 😉

 

SQL Server Database Listesi Almak
SQL Pivot Kullanımı
Mustafa Bükülmez

Liseden, Ağ Sistemleri ve Yönetimi bölümünden mezun oldum. Üniversiteden (2 yıllık), Bilgisayar Programcılığı bölümünden mezun oldum. Şuanda da AÖF, Yönetim Bilişim Sistemleri bölümünde okumaktayım.

Uzmanlık alanlarım; Windows Sistemleri, HTML, CSS, C# ve SQL’dir.

Hobi olarak uğraştığım genel konular, Photoshop, After Affects, Corel Draw’dır.Film, YABANCI dizi, Anime izlemeyi ve Manga okumayı severim. Arkadaşlarımla yürüyüş yapmayı ve grup olarak aktivitelere gitmeyi severim. Geri kalan zamanlarımın tümü bilgisayar karşısında geçer.