حذف رکوردهای تکراری در SQL


 حذف رکوردهای تکراری در SQL

در این پست با نحوه حذف رکوردهای تکراری یک جدول در SQL آشنا خواهید شد. سناریو در نظر داشته باشید که لیست از ایمیل‌های کاربران در جدول ثبت شده موجود است، قصد دارم ایمیل‌های تکراری را جستجو و حذف نمایم.

ایجاد جدول:

ابتدا یک جدول موقتی ایجاد و رکوردهای در آن درج خواهیم کرد.

-- ایجاد جدول 
CREATE TABLE [dbo].[Employee](  
    [ID] INT NOT NULL,  
    [Email] [varchar](50) NOT NULL  
);
-- ثبت ایمیل
USE Example
INSERT INTO [dbo].[Employee] VALUES (1,'test1@gmail.com');  
INSERT INTO [dbo].[Employee] VALUES (2,'test1@gmail.com');  
INSERT INTO [dbo].[Employee] VALUES (3,'test2@gmail.com');  
INSERT INTO [dbo].[Employee] VALUES (4,'test2@gmail.com');  
INSERT INTO [dbo].[Employee] VALUES (5,'test3@gmail.com');  
INSERT INTO [dbo].[Employee] VALUES (6,'test1@gmail.com');  
INSERT INTO [dbo].[Employee] VALUES (7,'test3@gmail.com');
GO

برای حذف رکوردهای تکراری از کد زیر استفاده خواهیم کرد:

-- حذف رکوردهای تکراری
USE Example
SELECT * FROM Employee  
GO  
WITH T1 AS   
        (  
           SELECT ID FROM DBO.EMPLOYEE EXCEPT SELECT MAX(ID) AS ID FROM DBO.EMPLOYEE GROUP BY Email HAVING COUNT(Email) > 1  
        )
DELETE FROM dbo.Employee WHERE ID IN (SELECT ID FROM T1)   
GO

منبع : www.omidnasri.com