重覆記錄:有兩個意義上的重覆記錄 一是完全重覆的記錄,也即所有欄位均重覆的記錄; 二是部分關鍵欄位重覆的記錄,比如Name欄位重覆,而其他欄位不一定重覆或都重覆可以忽略。 1、對於第一種重覆,比較容易解決,使用1 select distinct * from tableName 就可以得...
重覆記錄:有兩個意義上的重覆記錄
一是完全重覆的記錄,也即所有欄位均重覆的記錄;
二是部分關鍵欄位重覆的記錄,比如Name欄位重覆,而其他欄位不一定重覆或都重覆可以忽略。
1、對於第一種重覆,比較容易解決,使用
1 select distinct * from tableName
就可以得到無重覆記錄的結果集。
如果該表需要刪除重覆的記錄(重覆記錄保留1條),可以按以下方法刪除
1 --查詢無重覆記錄的結果集,並將結果集保存到臨時表#Tmp 2 select distinct * into #Tmp from tableName 3 --刪除表tableName 4 drop table tableName 5 --將臨時表#Tmp數據全部插入表tableName 6 select * into tableName from #Tmp 7 --刪除臨時表 8 drop table #Tmp
發生這種重覆的原因是表設計不周產生的,增加唯一索引列即可解決。
2、這類重覆問題通常要求保留重覆記錄中的第一條記錄,操作方法如下
假設有重覆的欄位為Name,Address,要求得到這兩個欄位唯一的結果集
1 --將tableName中的全部記錄插入臨時表#Tmp,並增加行號欄位 2 select identity(int,1,1) as autoID, * into #Tmp from tableName 3 --將臨時表#Tmp中的無重覆記錄插入臨時表#Tmp2(min(autoID)....group by Name,autoID-實現保留Name重覆的記錄中的第一條) 4 select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
最後一個select即得到了Name,Address不重覆的結果集(但多了一個autoID欄位,實際寫時可以寫在select子句中省去此列)
通過上面操作並將tableName中無重覆的結果集保存到了臨時表#Tmp2,可以通過刪除表tableName,然後再將臨時表#Tmp2記錄插入tableName實現刪除
tableName中重覆的記錄(只保留重覆記錄的第一條記錄)
註意:tableName中沒有autoID欄位,可以select去除autoID欄位實現