熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

詳解如何刪除SQL Server表中的重復行

2013-11-15 14:52:17  來源: SQL Server 

  如果表中有多組完全不同的重復的 PK 值則逐個刪除它們會很費時間在這種情況下可使用下面的方法

  首先運行上面的 GROUP BY 查詢來確定有多少組重復的 PK 值及每組的重復數

  選擇重復的鍵值放入臨時表中例如

SELECT col col col=count(*) INTO holdkey FROM t GROUP BY col col HAVING count(*) >  

  選擇重復的行放入臨時表中以清除進程中的重復值例如

SELECT DISTINCT t* INTO holddups FROM t holdkey WHERE tcol = holdkeycol AND tcol = holdkeycol 

  此時holddups 表應有唯一的 PK;但是如果 t 有重復的 PK 而行唯一(如上面的 SSN 示例)情況就不是這樣了請驗證 holddups 中的各個鍵是否唯一是否沒有鍵重復而行唯一的情況如果是這樣您必須停在該處確定對於給定重復的鍵值您希望保留哪些行例如以下查詢

SELECT col col count(*) FROM holddups GROUP BY col col 

  應為各行返回計數 如果結果是 請繼續執行下面的步驟 如果不是 則存在鍵重復而行唯一的情況且需要您決定要保存哪些行通常這將需要捨棄行或為此行創建新的唯一的鍵值為 holddups 表中每個此種重復 PK 執行這兩個步驟之一

  從原始表中刪除重復的行例如

DELETE t FROM t holdkey WHERE tcol = holdkeycol AND tcol = holdkeycol

  將唯一行放回原始表中例如

INSERT t SELECT * FROM holddups 


From:http://tw.wingwit.com/Article/program/SQLServer/201311/22468.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.