SQL’de tekrar eden kayıtları bulmak


Bazı durumlarda veri tabanında bulunan tablolalarınızda tekrar eden kayıtları bulup silme güncelleme vb. işlemleri yapmanız gerekiyorsa, aşağıdaki teknikler sayesinde tekrar eden (duplicate) kayıtları bulabilir ve istediğiniz işlemleri gerçekleştirebilirsiniz.

1. Teknik

DECLARE @Duplicate TABLE (
ID int identity(1,1) not null,
Fname varchar(10) not null,
Lname varchar(10) not null,
City varchar(10) not null
)

INSERT INTO @Duplicate VALUES('Tülin','Bağal','İstanbul')
INSERT INTO @Duplicate VALUES('Murat','Öz','İstanbul')
INSERT INTO @Duplicate VALUES('Mehmet','Karan','İzmir')
INSERT INTO @Duplicate VALUES('Murat','Öz','İstanbul')
INSERT INTO @Duplicate VALUES('Mehmet','Karan','İzmir')

--Bu kullanım SQL Server 2005 ve üst versiyonlar içindir.
;WITH CTE as(
SELECT  ROW_NUMBER() OVER(PARTITION BY FName, Lname,City ORDER BY (SELECT 1)) AS RowID,
*
FROM @Duplicate
)
SELECT ID, FName, Lname,RowID
FROM CTE
--WHERE RowID = 1

2. Teknik

Create Table SelectDuplicate
(ID int identity(1,1) not null,
Fname varchar(10) not null,
Lname varchar(10) not null,
City varchar(10) not null)

INSERT INTO SelectDuplicate VALUES('Tülin','Bağal','İstanbul')
INSERT INTO SelectDuplicate VALUES('Murat','Öz','İstanbul')
INSERT INTO SelectDuplicate VALUES('Mehmet','Karan','İzmir')
INSERT INTO SelectDuplicate VALUES('Murat','Öz','İstanbul')
INSERT INTO SelectDuplicate VALUES('Mehmet','Karan','İzmir')

SELECT * FROM SelectDuplicate
WHERE ID NOT IN (
SELECT MAX(ID) FROM SelectDuplicate
GROUP BY Fname,Lname)