PDA

View Full Version : حذف رکوردهای تکراری ؟



sasan_vm
پنج شنبه 06 دی 1386, 18:55 عصر
سلام

یک table دارم با 1000.000 رکورد در SQL Server 2000، بعلت تغییر ساختار برنامه مجبور هستم روی یکی از فیلدها از نوع varchar ایندکس (Unique) بزارم ولی رکوردهایی که در این فیلد مقدار مشترک داشته باشند وجود دارند چه تعداد (نمی دانم ؟)

این table شامل فیلدهایی از نوع binary نیز می باشد، ایجاد جدول جدید و اننتقال اطلاعات به علت حجم بالای رکوردها کار وقت گیری است. چطور می تونم از رکوردهای تکراری یکی را نگه دارم و بقیه را حذف کنم (با سرعت بالا) ؟

متشکرم

taheri-ali
جمعه 07 دی 1386, 06:37 صبح
دوست من فرض کن که اون فیلد اسمش nu1 باشه حالا این دستورو تو sql بنویس
select no1,count(nu1) from table group by nu1 having count(nu1)>'1'
این دستور رکوردهای تکراری رو بهت می ده در ضمن اگه کلیه فیلدهای اون اطلاعات با هم مشترک باشند فکر نکنم بتونی با دستور sqlفقط یکی از اونا رو delete کنی و باید رو تک تک اونا کار کنی و یکی یکی پاکشون کنی

JAFO_IRAN
شنبه 08 دی 1386, 15:29 عصر
سلام

1. اول باید تعریف تکراری معلوم بشه - مثلا یک یا چند فیلد داشته باشیم که یکی بودن آنها به معنی تکراری بودن رکورد فرض بشه.

2. اگر فیلد binary در بین فیلدهای مقایسه کننده بند قبل نباشند بهتره - میشه از روش زیر استفاده کرد - وگرنه مقایسه این binaryها با هم خودش داستان جداگانه‌ای میشه.

3. باید از بین رکوردهای تکراری یکی رو نگهداریم - مثلا اگه جدول دارای ستون ID باشه، رکوردی که کمترین ID رو داشته باشه....



delete tbl_Src
where ID not in (
select Min(ID), Field1, Field2
from tbl_Src
group by Field1, Field2)


ارادت

MShirzadi
یک شنبه 09 دی 1386, 14:06 عصر
فکر کنم اینجوری درست باشه


delete tbl_Src
where ID not in (
select Min(ID)
from tbl_Src
group by Field1, Field2)


چون خروجی شما بیشتر از یکی است در صورتی که Min(ID ) تنها یک خروجی می خواهد

در ضمن من تا حالا که یادم هست طی همین 3 هفته گذشته 2 بار در این رمینه بحث شده.

MohammadSoft
یک شنبه 09 دی 1386, 16:45 عصر
سلام
دوست عزیز به این یه نگاهی بکنید :
http://barnamenevis.org/forum/showthread.php?t=89715