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

SQL Server 與 Oracle 快速刪除重複記錄的四大招式對決

     編輯:關於SqlServer

SQL Server:四板斧法(無游標、極速)

  1. 建立同結構暫存表
    CREATE TABLE Products_temp (ProductID int, ProductName nvarchar(40), Unit char(2), UnitPrice money)
    
  2. 加上唯一索引並勾選「忽略重複值」(企業管理員 → 管理索引 → 新增 → 選項)
  3. 複製資料
    INSERT INTO Products_temp SELECT * FROM Products
    -- 回傳:「已忽略重複的索引鍵」
    
  4. 取代原表
    DELETE FROM Products
    INSERT INTO Products SELECT * FROM Products_temp
    DROP TABLE Products_temp
    

⚠️ 唯一索引欄位決定何謂「重複」,務必確認業務鍵正確。

Oracle:三種 RowID 刪重法

-- 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大量資料單陳述式,無暫存表開銷
游標逐列比對小表極慢,不建議生產環境
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved