سوال بپرسید
1

چطور می توان سطرهای تکراری را در SQL Server حذف کرد؟

سوال بپرسید

من یک پایگاه داده حجیم دارم که یکی از جداول اون شامل حدودا بیش از ۳۰۰ هزار رکورد هست. حالا می خواستم ردیف های تکراری رو از داخل اون پاک کنم.

جدول زیر در واقع داخل پایگاه داده من هست که شناسه اصلی هر ردیف RowID هست:

RowID int not null identity(1,1) primary key,
Col1 varchar(20) not null,
Col2 varchar(2048) not null,
Col3 tinyint not null

نمیدونم بهترین روش برای حذف ردیف های تکراری در SQL Server چی هست؟

برچسب ها:
گزارش سوال
پرسیده شده در 1 ماه پیش
آمار بازدید: 90

1 پاسخ

0
26 آذر 97 در 17:51

با فرض اینکه هیچ یک از ID های ردیف ت خالی یا null نیست میشه این نسخه رو پیچید:

ابتدا باید ستون های unique یا یکتا رو با استفاده از دستور GROUP BY جداسازی کنی و سپس مقادیر MIN یا MAX با استفاده از دستور SELECT جدا سازی بشه.

بعد دستور DELETE رو برای هر یک از RowId ها اعمال کنی. به صورت خلاصه کدش به شکل زیر میشه:

DELETE FROM MyTable
LEFT OUTER JOIN (
   SELECT MIN(RowId) as RowId, Col1, Col2, Col3 
   FROM MyTable 
   GROUP BY Col1, Col2, Col3
) as KeepRows ON
   MyTable.RowId = KeepRows.RowId
WHERE
   KeepRows.RowId IS NULL

از طرفی اگر به جای id عددی (Integer) از GUID استفاده می کنی، می تونی مقدار زیر رو:

MIN(RowId)

با این مقدار جایگزین کنی:

CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))