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 hesaplananKeepRows
arasındaLEFT OUTER JOIN
gerçekleştirir.KeepRows
içindeki birRowId
ile eşleşmeyenMyTable
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!