Sql’de 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.

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

Sql’de mükerrer kayıtları silmek” hakkında 5 yorum

  1. irfan Dölek

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

    Cevapla
  2. Serdar Engin

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

    Cevapla
  3. zdx

    Ahmet bey çok güzel bir paylaşım emeklerinizin karşılığını almanız dileği ile çok sağolun.

    Cevapla
  4. BURHAN

    Teşekkür ederim. Çok daha kompleks queryler düşünürken bu paylaşım sayesinde rahatça işimi hallettim.

    Cevapla

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir