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
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
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
Dostum güzel bir çalışma.Bilgi paylaşımı adına yaptın takdire şayan bir davranış.Çalışmalrının devamını dilerim.
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 . . .
eline koluna sağlık
harbiden baya işime yaradı.teşekkürü bir bor bilirim
Ahmet bey çok güzel bir paylaşım emeklerinizin karşılığını almanız dileği ile çok sağolun.
Teşekkür ederim. Çok daha kompleks queryler düşünürken bu paylaşım sayesinde rahatça işimi hallettim.