CREATE TABLE Products_temp (ProductID int, ProductName nvarchar(40), Unit char(2), UnitPrice money)
INSERT INTO Products_temp SELECT * FROM Products
-- 回傳:「已忽略重複的索引鍵」
DELETE FROM Products
INSERT INTO Products SELECT * FROM Products_temp
DROP TABLE Products_temp
⚠️ 唯一索引欄位決定何謂「重複」,務必確認業務鍵正確。
-- 1. 建立暫存表法
CREATE TABLE temp_emp AS SELECT DISTINCT * FROM employee;
TRUNCATE TABLE employee;
INSERT INTO employee SELECT * FROM temp_emp;
-- 2. 保留最大 RowID
DELETE FROM employee e2
WHERE rowid NOT IN (SELECT MAX(rowid) FROM employee e1
WHERE e1.emp_id = e2.emp_id
AND e1.emp_name = e2.emp_name
AND e1.salary = e2.salary);
-- 3. 高效 GROUP BY 寫法(推薦)
DELETE FROM employee
WHERE rowid NOT IN (SELECT MAX(rowid) FROM employee
GROUP BY emp_id, emp_name, salary);
| 方法 | 適用資料量 | 備註 |
|---|---|---|
| SQL Server 四板斧 | 百萬列以上 | 索引建立為主開銷,極快 |
| Oracle RowID GROUP BY | 大量資料 | 單陳述式,無暫存表開銷 |
| 游標逐列比對 | 小表 | 極慢,不建議生產環境 |