我們可以用關鍵字Distinct去掉結果集中重復的元素,但是這樣並不能刪除數據庫中重復的元素。
如果想把數據表某個字段重復的數據刪除,利用臨時表作為中轉站是個好方法。
設想我們想把數據表Tb_Blogs中字段BlogUrl有重復值的數據多余的行刪掉(有相同的BlogUrl的數據只保留一行),那麼我們可以這樣做:
select * into #temp1 from Tb_Blogs where ID in (select Max(ID) from Tb_Blogs group by BlogUrl)
這個語句把沒有重復的數據全部保存到臨時表#temp1中(注意我這個表中有主鍵ID,如果沒有主鍵的行那就應該在臨時表中建立主鍵,然後在臨時表中再進行去重復行,再建立另外一個臨時表來保存沒有重復行的數據),然後
drop table tb_blogs
刪除表tb_blogs
select * into tb_blogs from #temp1
把臨時表沒有重復行的數據全部倒回到tb_blogs中
drop table #temp1
刪除臨時表
當我以為上面的是個好方法時,蜘蛛卻讓我感到自己瞎折騰了,原來還有更好的方法:
Delete from Tb_Blogs where [ID] Not In (Select Max([ID]) from Tb_Blogs Group by [BlogUrl])