kayıt eklemeyi hallederim bununla evet süper.
Mükerrer mevcut kayıtlar hakkında bir önerin var mı?
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 IDlerini 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 IDsini 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 IDler 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.