SQL'de aynı içeriğe sahip kayıtları bulma ve silmeBu 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)