首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 保留重複記錄第一筆的兩種 T-SQL 寫法

     編輯:MySQL 資料庫相關知識

情境

資料表 table1 某欄位組合重複,需刪除重複只保留第一筆(依身分識別欄 ID 排序)。

方法一:臨時表 + ROW_NUMBER 邏輯(通用)

SELECT *, IDENTITY(int,1,1) AS ID INTO #t1 FROM table1;

DELETE a
FROM #t1 a
WHERE ID > (
    SELECT MIN(ID) FROM #t1
    WHERE field1 = a.field1
      AND field2 = a.field2
      -- ... fieldn = a.fieldn
);

TRUNCATE TABLE table1;
ALTER TABLE #t1 DROP COLUMN ID;
INSERT INTO table1 SELECT * FROM #t1;

方法二:DISTINCT 直接去重(僅當全列相同時適用)

SELECT DISTINCT * INTO #t1 FROM table1;
TRUNCATE TABLE table1;
INSERT INTO table1 SELECT * FROM #t1;

注意事項

  • 方法一可指定「判斷重複的欄位組合」,彈性較高。
  • 方法二僅適合完全重複的列,若只有部分欄位重複會導致資料遺失。
  • 操作前務必備份原表,TRUNCATE 不可回滾。
  • 大量資料建議分批處理,避免長時間鎖表。

補充:SQL Server 2005+ 可用 ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ID) 寫法更簡潔高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved