Sql mükerrer kayıtları silmek


Sql Server’da bir tablodaki tekrar eden kayıtları nasıl silebiliriz ?
L_User isminde bir tablo oluşturup tabloya bir kaç kayıt girelim.
  1. CREATE TABLE [dbo].[L_User] (  
  2.     [ColumnId] [int] IDENTITY (1, 1) NOT NULL ,  
  3.     [UserName] [char] (10) NULL ,  
  4.     [UserPwd] [char] (10) NULL  
  5. ON [PRIMARY]  
Böyle bir örnekte kesin ve doğru bir query şekli olmadığı için kişilere bağlı olarak farklı yöntemler kullanılabilir. while ile döngü kurma, cursor kullanmak, temporary table oluşturmak gibi yöntemler tercih edilebilir. Burada bunlardan bir iki tanesine örnek vereceğim.
Bu yöntemlerden en kolayı, identity columndan yararlanmaktır. Tekrar eden kayıtları gruplayıp en küçük veya en büyük ID’lerini alıp diğerlerini sileceğiz.
  1. DELETE FROM L_User WHERE NOT ColumnId IN (  
  2.     SELECT MIN(ColumnId) FROM L_User  
  3.     GROUP BY UserName,UserPwd  
  4. )  
Bu yönteme benzer olarak tabloyu kendisiyle JOIN edip eş kayıtları bulacağız. Eşleşen kayıtların ID’lerinden küçük olanları sileceğiz. Önce, klasik WHERE mantığıyla yapalım.
  1. DELETE FROM L_User WHERE ColumnId<  
  2.     (SELECT MAX(ColumnId) FROM L_User U2  
  3.     WHERE L_User.UserName = U2.UserName  
  4.     AND L_User.UserPwd = U2.UserPwd)  
Bunu INNER JOIN ile ifade edelim.
  1. DELETE FROM L_User FROM L_User U1 INNER JOIN (  
  2.     SELECT MAX(ColumnId)ColumnId,UserName,UserPwd  
  3.     FROM L_User  
  4.     GROUP BY UserName,UserPwd)U2  
  5. ON U1.UserName=U2.UserName  
  6. WHERE U1.ColumnId < U2.ColumnId   
Başka bir yöntem olarak WHILE ile her kayda konumlanarak silelim.
  1. SET ROWCOUNT 1--Her defasında bir kayıt okunsun  
  2. SELECT 2006--Bir değer select edelim  
  3. WHILE @@ROWCOUNT > 0  
  4.     DELETE L_User  
  5.     WHERE 1 <  
  6.         (SELECT COUNT(*) FROM L_User U2  
  7.         WHERE L_User.UserName = U2.UserName  
  8.            and L_User.UserPwd = U2.UserPwd)  
  9.   
  10. SET ROWCOUNT 0--ROWCOUNT'u geri alalım 


KAYNAK : http://www.ahmetkaymaz.com/2006/04/21/sqlde-tekrarlanan-kayitlari-silmek/

Yorumlar

Bu blogdaki popüler yayınlar

c# E-fatura görüntüleme aracı

Kablo Modem Netmaster CBW-700V VPN Ayarları