
نوشته شده توسط
JavanSoft
یک نکته مهم
دستور حذف فوق کلیه اطلاعات تکراری را حذف میکند بدون اینکه اثری از یکی از انها باقی بگذارد
اگر میخواهید از رکوردهای تکراری یکی بماند
ایتدا دستور زیر را اجرا کنید
Alter table X add RmvTag int Identity
کدی که شما نوشتید تنها زمانی قابل استفاده است که حد اکثر یک نمونه داده ی تکراری داشته باشیم چون هنگامی سطر پاک میشه که Tag آن برابر با max آن گروه باشه. پس اگر n تا رکورد تکراری از یک نمونه داشته باشیم تنها یک نمونه آن (یعنی Tag=max) حذف میشه.
ولی این کد:
delete from @t
where i not in
(select max(i) -- or MIN
from @t
group by name,family)
و این کد:
DELETE FROM @t
FROM @t t1
WHERE EXISTS
(SELECT *
FROM @t t2
where t1.name = t2.name
and t1.family = t2.family
and t1.i > t2.i)
کاملا درست عمل می کنند.