SQL Cift Kayıtları Bulmak ve Silmek
August 2019 (0) Iptv 11/21/2024
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.
Ş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.
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
Öncelikle yukarıdaki örneğimize göre bir silme işlemi yapalım.
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
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 )
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) > 1Yol III – SQL Mükerrer Kayıtlar Silmek
select * FROM TABLO_ADI WHERE ILGILI_SUTUN NOT IN
(
SELECT (ILGILI_SUTUN )
FROM TABLO_ADI
Group By ILGILI_SUTUN
Having Count (ILGILI_SUTUN ) > 1
)and Tarih_Sutunu >='30.08.2019'