首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 重複記錄處理:查找、過濾與刪除完整指南

     編輯:關於SqlServer

提示:文中「重複」指特定欄位值重複,非整列完全相同。

1. 查找重複記錄

使用子查詢搭配 GROUP BY 與 HAVING COUNT(*) > 1 找出重複值:

SELECT * 
FROM 表 
WHERE 重複欄位 IN (
    SELECT 重複欄位 
    FROM 表 
    GROUP BY 重複欄位 
    HAVING COUNT(*) > 1
);

2. 過濾重複記錄(只保留一筆)

常見做法是利用 ROW_NUMBER() 分組排序後刪除序號大於 1 的列(SQL Server 2005+):

WITH CTE AS (
    SELECT *, 
           ROW_NUMBER() OVER (PARTITION BY 重複欄位 ORDER BY (SELECT 0)) AS rn
    FROM 表
)
DELETE FROM CTE WHERE rn > 1;

3. 直接刪除重複記錄(保留最小 ID)

DELETE t1
FROM 表 t1
INNER JOIN 表 t2
  ON t1.重複欄位 = t2.重複欄位
 AND t1.ID > t2.ID;  -- 假設有主鍵 ID

4. 補充:建立唯一索引預防重複

CREATE UNIQUE INDEX UX_表_重複欄位 ON 表(重複欄位)
    WITH (IGNORE_DUP_KEY = ON);  -- 插入重複值時只發出警告不報錯

效能提示

  • 重複欄位務必加索引,否則大表查詢極慢。
  • 刪除大量資料時分批次執行,避免鎖升級與記錄檔暴增。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved