SQL Server Tablosundan Özdeş Satırları Kolayca Nasıl Kaldırırsınız

Veritabanınızı temizlemek, veri kalitesini sürdürebilmek için hayati önem taşır, özellikle de özdeş satırlar söz konusu olduğunda. Eğer 300,000’den fazla satır içeren büyük bir SQL Server tablosunda çalışıyorsanız, kaldırmak istediğiniz tekrar eden kayıtlarla karşılaşabilirsiniz. Bu blog yazısında, ilgili verileri korurken tekrarları etkili bir şekilde ortadan kaldırmanın basit bir süreçte nasıl yapılacağını göstereceğiz.

Sorunun Anlaşılması

MyTable gibi bir tabloya sahip olduğunuzda, bir kimlik alanı ile birincil anahtar (RowID) içeren, özdeşler tam eşleşmeler olarak görünmez. Bunun yerine, Col1, Col2 ve Col3 gibi bir veya daha fazla anahtar olmayan sütunlarda farklılık gösterebilirler. Veri kaybı yaşamadan tablonuzun bütünlüğünü sağlamak için bu tekrarları akıllıca tanımlamak çok önemlidir.

MyTable Örnek Yapısı

RowID int not null identity(1,1) primary key,
Col1 varchar(20) not null,
Col2 varchar(2048) not null,
Col3 tinyint not null

Çözüm Açıklaması

İlgili bir satırı korurken tekrar eden satırları etkili bir şekilde kaldırmak için SQL Server’ın GROUP BY ifadelerini ve DELETE komutlarını kullanabilirsiniz. Aşağıda adımları netlik sağlaması açısından ayrıntılı olarak bulabilirsiniz.

Adım Adım Rehber

1. Gruplama ve Eşsiz Satırları Seçme

İlk adım, tekrarları kontrol etmek istediğiniz sütunlara göre satırları gruplamaktır. Bu durumda Col1, Col2 ve Col3. Her tekrar grubunun en küçük RowID’sini bulmak için MIN fonksiyonunu kullanacaksınız; bu da hangi satırı koruyacağınızı belirleyecek.

SQL kodu şöyle görünebilir:

SELECT MIN(RowId) as RowId, Col1, Col2, Col3 
FROM MyTable 
GROUP BY Col1, Col2, Col3

2. Tekrarları Silme

Hangi satırları koruyacağınızı belirledikten sonra, sonraki adım, yeni oluşturduğunuz KeepRows kümesinde karşılığı olmayan her şeyi silmektir. Silme işlemi için SQL kodu şu şekildedir:

DELETE FROM MyTable
LEFT OUTER JOIN (
   SELECT MIN(RowId) as RowId, Col1, Col2, Col3 
   FROM MyTable 
   GROUP BY Col1, Col2, Col3
) as KeepRows ON
   MyTable.RowId = KeepRows.RowId
WHERE
   KeepRows.RowId IS NULL

Bu komut şu işleri yapar:

  • MyTable ile hesaplanan KeepRows arasında LEFT OUTER JOIN gerçekleştirir.
  • KeepRows içindeki bir RowId ile eşleşmeyen MyTable içindeki her satır silinir.

Benzersiz Tanımlayıcıların Yönetimi

Eğer tablonuzda satır kimliği olarak tam sayı yerine bir GUID bulunuyorsa, MIN seçimlerinizi basitçe ayarlayabilirsiniz. Değiştirin:

MIN(RowId)

Şuraya:

CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))

Bu, minimum GUID’yi doğru bir şekilde tanımlamanızı sağlarken veri türü bütünlüğünü korur.

Sonuç

SQL Server’dan tekrar eden satırları kaldırmak, GROUP BY ve ilgili birleştirme ve silme tekniklerini kullanarak verimli bir şekilde gerçekleştirilebilir. Bu adımları izleyerek, önemli verilerinizi kaybetme riski olmadan temiz ve işlevsel bir veritabanı sürdürebilirsiniz. Her zaman geniş çaplı silme işlemleri gerçekleştirmeden önce veritabanınızı yedeklemeyi unutmayın!

Burada edindiğiniz bilgi ile SQL tablolarınızdaki tekrar sorunlarını güvenle ele alabilirsiniz. İyi sorgulamalar!