14 Şubat 2015 Cumartesi

SQL'de aynı içeriğe sahip kayıtları bulma ve silme

1 comment
Bu yazıda, SQL ile aynı içeriğe sahip farklı kayıtların (duplicate rows) nasıl bulunacağını ve bulunan bu kayıtların nasıl silineceğini anlatmaya çalışacağım.

Futbolcular adında bir tablomuz olduğunu düşünelim. Bu tablodaki kayıtlar da aşağıdaki gibi olsun.


Tabloda görebileceğiniz üzere Diego ve Mehmet Topal'ın olduğu satırlar birbirleriyle primary key'leri yani ID kolonu hariç birebir aynı. Caner Erkin'in olduğu satırlarda ise yalnızca FormaNo kolonları farklı.

İlk olarak primary key dışındaki tüm alanları aynı olan kolonları getirelim.

SELECT MAX(ID) as ID, Ad, Soyad, FormaNo FROM Futbolcular
GROUP BY Ad, Soyad, FormaNo
HAVING COUNT(*) > 1

Bu sorguyu çalıştırdığımda bana Ad, Soyad ve FormaNo alanları eşit olan kayıtların en büyük ID'ye sahip olanlarını getirmesi gerekiyor. Sorguyu çalıştırıyorum ve sonuç aşağıdaki gibi.


Şimdi ise FormaNo alanını sorgudan çıkardığımda Caner Erkin'in sonuçlar arasına eklenip eklenmediğine bakacağım. Sorgumu aşağıdaki gibi değiştiriyorum.

SELECT MAX(ID) as ID, Ad, Soyad FROM Futbolcular
GROUP BY Ad, Soyad
HAVING COUNT(*) > 1

Sonuç olarak FormaNo alanının eşit olma durumu aranmadığı zaman Caner de sonuçlar arasında görünüyor.


Bu kayıtları silmek istediğimizde ise aşağıdaki gibi bir sorgu kullanabiliriz.

DELETE FROM Futbolcular
WHERE ID IN
( SELECT MAX(ID) as ID FROM Futbolcular
GROUP BY Ad, Soyad, FormaNo
HAVING COUNT(*) > 1)
Read More