Sql’de mükerrer kayıtları silmek

Query Analyzer Add comments

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]

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.

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

3 Responses to “Sql’de mükerrer kayıtları silmek”

  1. irfan Dölek Says:

    Dostum güzel bir çalışma.Bilgi paylaşımı adına yaptın takdire şayan bir davranış.Çalışmalrının devamını dilerim.

  2. Serdar Engin Says:

    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 . . .

  3. Samet Says:

    eline koluna sağlık :)
    harbiden baya işime yaradı.

    teşekkürü bir bor bilirim :)

Leave a Reply

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Giriş