MS-SQL刪除數據庫中的重複行

假如表中有多組完全不同的重複的 PK 值,則逐個刪除它們會很費時間。在這種情況下,可使用下面的方法:
1.首先,運行上面的 GROUP BY 查詢來確定有多少組重複的 PK 值及每組的重複數。
2.選擇重複的鍵值放入臨時表中。例如:
SELECT col1, col2, col3=count
INTO holdkey
FROM t1
GROUP BY col1, col2
HAVING count  1
3.選擇重複的行放入臨時表中,以清除進程中的重複值。例如:
SELECT DISTINCT t1.
INTO holddups
FROM t1, holdkey
WHERE t1.col1 = holdkey.col1
AND t1.col2 = holdkey.col2
4.此時,holddups 表應有唯一的 PK;但是,假如 t1 有重複的 PK 而行唯一,情況就不是這樣了。請驗證 holddups 中的各個鍵是否唯一,是否沒有鍵重複而行唯一的情況。假如是這樣,您必須停在該處,確定對於給定重複的鍵值,您希望保留哪些行。例如,以下查詢:
SELECT col1, col2, count
FROM holddups
GROUP BY col1, col2
應爲各行返回計數 1。假如結果是 1,請繼續執行下面的步驟 5。假如不是 1,則存在鍵重複而行唯一的情況,且需要您決定要保存哪些行。通常,這將需要捨棄行或爲此行創建新的唯一的鍵值。爲 holddups 表中每個此種重複 PK 執行這兩個步驟之一。
5.從原始表中刪除重複的行。例如:
DELETE t1
FROM t1, holdkey
WHERE t1.col1 = holdkey.col1
AND t1.col2 = holdkey.col2
6.將唯一行放回原始表中。例如:
INSERT t1 SELECT  FROM holddu

發佈了17 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章