خوش آموز به آموزشگاه رایگان خوش آموز خوش آمدید

آموزش حذف رکوردهای تکراری در جداول SQL Server

آموزش حذف رکوردهای تکراری در جداول SQL Server

کد مطلب : 2929 PDF

امان از رکوردهای تکراری در SQL، در واقع اطلاعاتی قبلا توسط کاربران در برنامه ثبت شده، مجددا در دیتابیس ذخیره می شود و همین باعث دردسر می شود. هم از بابت فضای ذخیره شده و هم سردرگمی از بابت وجود چندین رکورد مشابه و شلوغ کردن بی جهت برنامه. اگر برنامه نویس فیلترهایی را در زمان افزودن رکورد در برنامه لحاظ نکرده باشد، کاربران احتمال اینکه رکوردهای تکراری آنهم به تعداد زیاد در دیتابیس وارد کنند وجود دارد. پس بهترین گزینه این است که با مکانیزم هایی در اپلیکیشن مورد نظر از ثبت رکوردهای تکراری جلوگیری به عمل آورده شود. اما زمانی که رکوردهای تکراری ثبت شد باید به طریقی تکراری ها را حذف کرد. دوستان دقت داشته باشید که در دنیای واقعی به محابا اقدام به حذف ذکوذدهای تکراری نکنید اگر با این رکوردها در جداول دیگری سند یا رکوردی ثبت شده باشد، قطعا شما را به دردسر خواهد انداخت.. من در اینجا فرض را بر این گذاشتم که یک Table بدون هیچ Dependency به جداول دیگر، دارای تعدادی رکورد تکراری است که می خواهیم تکراری ها را حذف کنیم و فقط از هر رکورد تکراری ، یک رکورد در جدول باقی بماند. چون بی معنی که از یک رکورد، چندین رکورد تکراری در جدول وجود داشته باشد.
من در این مثال یک دیتابیس بصورت دستی در SQL ایجاد کردم و سپس با استفاده کد زیر اقدام به ایجاد یک Table در دیتابیس مورد نظرم کردم:

CREATE TABLE [dbo].[ATTENDANCE](
AUTOID INT IDENTITY(1,1) ,
[EMPLOYEE_ID] [varchar](50) NOT NULL,
[ATTENDANCE_DATE] [date] NOT NULL
) ON [PRIMARY]



حال که Table ایجاد شد، با استفاده از دستور زیر چندین رکورد تکراری در آن اضافه می کنم:

INSERT INTO dbo.ATTENDANCE (EMPLOYEE_ID,ATTENDANCE_DATE)VALUES
('A001',CONVERT(DATETIME,'01-01-11',5))
INSERT INTO dbo.ATTENDANCE (EMPLOYEE_ID,ATTENDANCE_DATE)VALUES
('A001',CONVERT(DATETIME,'01-01-11',5))
INSERT INTO dbo.ATTENDANCE (EMPLOYEE_ID,ATTENDANCE_DATE)VALUES
('A002',CONVERT(DATETIME,'01-01-11',5))
INSERT INTO dbo.ATTENDANCE (EMPLOYEE_ID,ATTENDANCE_DATE)VALUES
('A002',CONVERT(DATETIME,'01-01-11',5))
INSERT INTO dbo.ATTENDANCE (EMPLOYEE_ID,ATTENDANCE_DATE)VALUES
('A002',CONVERT(DATETIME,'01-01-11',5))
INSERT INTO dbo.ATTENDANCE (EMPLOYEE_ID,ATTENDANCE_DATE)VALUES
('A003',CONVERT(DATETIME,'01-01-11',5))


اگر به جدول مربوطه نگاهی داشته باشید خواهید دید که رکوردهای تکراری در آن به وضوح مشخص هستند.

آموزش حذف رکوردهای تکراری در جداول SQL Server . آموزشگاه رایگان خوش آموز

با استفاده از دستور زیر می توانید یک Group by از رکوردهای تکراری بدست آورید که بدانید از هر EMPLOYEE_ID، چند رکورد تکراری در این جدول ثبت شده است.

SELECT * FROM dbo.ATTENDANCE WHERE AUTOID NOT IN (SELECT MIN(AUTOID)
FROM dbo.ATTENDANCE GROUP BY EMPLOYEE_ID)


حالا با استفاده از دستور زیر می توانید رکوردهای تکراری را در این جدول حذف کنید.

DELETE FROM dbo.ATTENDANCE WHERE AUTOID NOT IN
(SELECT MIN(AUTOID) FROM dbo.ATTENDANCE GROUP BY EMPLOYEE_ID)


لطفا قبل از اجرای دستور به فیلد AutoID دقت کنید، چون کار حذف رکوردهای تکراری بر اساس این ستون انجام خواهد شد. در واقعا دستور بالا کوچکترین Autoid را برای رکوردهای موجود در ستون EMPLOYEE را انتخاب می کند و مابقی رکوردها را حذف می کند. مثلا شما به جای MIN می توانید از MAX استفاده کنید تا بزرگترین AUTOID را برای اساس EMPLOYEE_ID نگه دارد و مابقی را حذف کند.

آموزش حذف رکوردهای تکراری در جداول SQL Server . آموزشگاه رایگان خوش آموز


شما چند بار که دستور فوق را اجرا کنید، کاملا قضیه برای شما ملموس خواهد شد که بر چه اساسی رکوردها حذف می شوند. با استفاده از همان دو خط دستور به راحتی می توانید Duplicate Record های موجود در جدول SQL را Delete کنید.



آموزش پایگاه داده اس کیو ال سرور به زبان ساده از مبتدی تا پیشرفته بصورت کاملا کاربردی


دیدگاه ها(0)

دیدگاه خود را ثبت کنید: