在資料庫操作中,刪除重複資料是常見需求。本文示範如何使用 SQL 刪除重複記錄,並保留每組重複資料中 AutoID 最小的一筆。
首先建立一個名為 t0807 的測試表,包含自動遞增主鍵 AutoID、id 與 username 欄位:
IF OBJECT_ID('t0807') IS NOT NULL
DROP TABLE t0807
GO
CREATE TABLE t0807 (
AutoID INT IDENTITY(1,1) PRIMARY KEY,
[id] INT,
username VARCHAR(10)
)
GO
插入包含重複 username 的測試資料:
INSERT INTO t0807
SELECT 1,'1' UNION ALL
SELECT 4,'1' UNION ALL
SELECT 4,'2' UNION ALL
SELECT 6,'2' UNION ALL
SELECT 2,'3' UNION ALL
SELECT 7,'3'
GO
核心邏輯:找出每個 username 群組中 id 最小值對應的 AutoID,刪除不在這些 AutoID 清單中的記錄。
DELETE FROM t0807
WHERE AutoID NOT IN (
SELECT AutoID FROM t0807 a
WHERE [id] <= (
SELECT MIN([id]) FROM t0807 b WHERE a.username = b.username
)
)
GO
執行後剩下 3 筆資料,每個 username 保留 id 最小的那一筆:
AutoID id username
1 1 1
3 4 2
5 2 3
此方法適用於 SQL Server,透過子查詢精確定位需保留的記錄,避免誤刪。