close

在維護舊系統時,有時候會遇到有些資料表沒有按照資料表的建立規則建PK

當資料表中出現重複資料時,會不知道該用什麼條件刪除多餘的資料

方法一

如果在可以下DDL語法時,可以先建立一張暫存表

將原資料表的資料,Distinct過後放入暫存表中

再刪除原資料表的資料,倒入暫存表的資料

 

但有時候額外建立資料表會有一些管理上的問題

如果要處理不同資料表勢必要建立對應的暫存表

維護上會略為麻煩

 

可以單純透過語法進行處理

方法二

DELETE FROM [TABLENAME]
WHERE RID IN
(
  SELECT RID
  FROM
  (
    SELECT ROWID RID,ROW_NUMBER()OVER(PARTITION BY [COLUMN_NAME] ORDER BY [COLUMN_NAME]) RN--給予順序
    FROM [TABLENAME]
    WHERE [CONDITION]--所要指定的資料群集
  ) WHERE RN>1--篩選掉第一筆的RID
);

每筆資料列在資料表中都會存有唯一的資料編號 ROWID

透過ROW_NUMBER()將指定欄位進行編號,在外層再挑出RN>1資料的ROWID(重富資料)

根據這些ROWID進行刪除的動作,即可透過不新增暫存表的方式把重複資料進行刪除

arrow
arrow
    全站熱搜

    Louis 發表在 痞客邦 留言(0) 人氣()