TEKRAR EDEN KAYITLARI TEMİZLEME YÖNTEMLERİ 1

Merhaba Arkadaşlar ,

Geçenlerde konuştuğumuz bir mevzu üzerine bu makaleyi yazmaya karar verdim.  Bana sorulan  soru üzerine geniş çaplı bir makale yazarak bir kaç yöntemi sizlerle paylaşmak isterim.

Tekrar eden kayıtları nasıl silebiliriz ?

Bu sorunun cevabına geçmeden once ;

Bir test tablosu ve içerisine de bir den fazla aynı kayıt basılmış bir veri bloğu lazım.

Test tablomuzu ve içerisine basacağımız verinin scriptini aşağıda sizlerle paylaşmaktayım.

--Test DB 'si oluşturma ...
CREATE DATABASE SQLTURKIYE;
GO
-- Test Tablomuzu oluşturuyoruz.
CREATE TABLE DuplicateTable
    (
      ID INT IDENTITY(1, 1) ,
      Name VARCHAR(50) ,
      SurName VARCHAR(75)
    );
GO

--Oluşturduğumuz tablomuza 3 er adet aynı kayıdı basıyoruz.
DECLARE @i INT= 0;
WHILE @i < 3
    BEGIN
        INSERT  INTO DuplicateTable
                ( Name, SurName )
        VALUES  ( 'Yusuf', 'KAHVECİ' ),
                ( 'Yaşar', 'KAHVECİ' ),
                ( 'Ufuk', 'DEDE' );
        SET @i = @i + 1;
    END;

 

Script ‘i EXECUTE ettikten sonra , tablomuzun içerisinde ki veriyi kontrol edecek olursak. ‘Yusuf KAHVECİ’,’Yaşar KAHVECİ’ ve ‘Ufuk DEDE’ adında 3 er adet kayıt yer almaktadır. Bu durum veri kirliliğine ve performans sorunlarına yol açabileceğinden ki ileride tablo buyutu kontrolsüz olarak büyüyecek ve daha büyük problemlere yol açacaktır.

Sistemlerimizde bu tarz kontrolsüz büyüme ve kirli data bulundurmamaya dikkat edelim. Genel olarak  bu durumlarda karşılaşacağımız problemlerin detaylarını diğer makalemde sizlerle paylaşacağım.

Amacımız bu 3 ‘er  kayıttan oluşan  verileri tekilleştirmek. O halde ne yapmalıyız.

Tekrar eden kayıtlardan bir tanesini tabloda bırakıp diğerlerini silmeliyiz.

Aşağıda ki sorgu ile birden fazla kayıtların listesine erişmekteyiz.

SELECT  Name ,
        Surname ,
        COUNT(*) TotalCount
FROM    duplicateTable
GROUP BY Name ,
        Surname
HAVING  COUNT(*) > 1
ORDER BY COUNT(*) DESC;
GO

 

2

 

Yukarıda da gördüğünüz üzere birden fazla aynı isime ve soyisime  sahip kullanıcılar ın bilgilerine ulaşmış olduk. Her üç kulanıcınında üçer ader kayıdı bulunmakta.

Bu kayıtları Silmek için nasıl yöntemler deneyebiliriz.

Yöntem 1 :

DELETE  FROM DuplicateTable
WHERE   ID NOT IN ( SELECT  MAX(ID)
                    FROM    DuplicateTable
                    GROUP BY Name ,
                            Surname );
GO

 

Yukarıda ki Query de de görüldüğü üzere  Name ve SurName ‘e göre veriyi gruplayarak maksimum ID lerini çekiyoruz ve bu ID ler dışında kaln kayıtları DELETE ediyoruz.

İşlemimizin sonucunda tablomuza SELECT çekip datalarımızı kontrol edebiliriz.

SELECT  *
FROM    DuplicateTable;
GO

 

3

Bunun sonucunda  ekran görntümüzde de görüldüğü gibi tablomuzda kayıt çiftlemesi ortadan kalkmış ve datalarımız temizlenmiştir.

Yöntem 2 adlı makalemi okuyarak bu yöntemin dışında hangi yöntemlerle silme işlemini gerçekleştireceğinizi pekiştirebilirsiniz.

 

İyi Çalışmalar.

One Reply to “TEKRAR EDEN KAYITLARI TEMİZLEME YÖNTEMLERİ 1”

Leave a Reply

Your email address will not be published. Required fields are marked *