Nis 21
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.
CREATE TABLE [dbo].[L_User] ( [ColumnId] [int] IDENTITY (1, 1) NOT NULL , [UserName] [char] (10) NULL , [UserPwd] [char] (10) NULL ) ON [PRIMARY]

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.
DELETE FROM L_User WHERE NOT ColumnId IN ( SELECT MIN(ColumnId) FROM L_User GROUP BY UserName,UserPwd )
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.
DELETE FROM L_User WHERE ColumnId< (SELECT MAX(ColumnId) FROM L_User U2 WHERE L_User.UserName = U2.UserName AND L_User.UserPwd = U2.UserPwd)
Bunu INNER JOIN ile ifade edelim.
DELETE FROM L_User FROM L_User U1 INNER JOIN ( SELECT MAX(ColumnId)ColumnId,UserName,UserPwd FROM L_User GROUP BY UserName,UserPwd)U2 ON U1.UserName=U2.UserName WHERE U1.ColumnId < U2.ColumnId
Başka bir yöntem olarak WHILE ile her kayda konumlanarak silelim.
SET ROWCOUNT 1--Her defasında bir kayıt okunsun SELECT 2006--Bir değer select edelim WHILE @@ROWCOUNT > 0 DELETE L_User WHERE 1 < (SELECT COUNT(*) FROM L_User U2 WHERE L_User.UserName = U2.UserName and L_User.UserPwd = U2.UserPwd) SET ROWCOUNT 0--ROWCOUNT'u geri alalım



Temmuz 21st, 2007 at 10:08
Dostum güzel bir çalışma.Bilgi paylaşımı adına yaptın takdire şayan bir davranış.Çalışmalrının devamını dilerim.
Haziran 26th, 2009 at 11:40
harika işler çıkarmışsın dostum,tüm çalışmalarına göz gezdirdim sadece burada tebrik ediyorum, kalabalık olmasın diye
ayrıca kitaplarını en yakın y-zamanda temin edeceğimi garanti ediyorum
tekrar teşekkürler . . .
Kasım 1st, 2009 at 00:35
eline koluna sağlık
harbiden baya işime yaradı.
teşekkürü bir bor bilirim