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

SQL 快速找出資料表重複資料的查詢技巧

     編輯:關於SqlServer

一條 SQL 秒找重複鍵值

建立主鍵或唯一索引失敗時,往往是因為候選欄位存在重複值。以下通用查詢能快速定位重複組合與筆數,適用於所有主流關聯式資料庫。

核心查詢

SELECT column1, column2, COUNT(*) AS dup_cnt
FROM tableName
GROUP BY column1, column2
HAVING COUNT(*) > 1
ORDER BY dup_cnt DESC;

參數說明

  • column1, column2:欲檢查的複合鍵欄位(單一欄位只寫一個)。
  • COUNT(*):重複筆數。
  • HAVING COUNT(*) > 1:只保留重複群組。
  • ORDER BY dup_cnt DESC:最嚴重重複優先顯示。

進階變體

-- 1. 找出所有重複列的完整資料(含其他欄位)
SELECT t.*
FROM tableName t
JOIN (
    SELECT column1, column2
    FROM tableName
    GROUP BY column1, column2
    HAVING COUNT(*) > 1
) dup ON t.column1 = dup.column1 AND t.column2 = dup.column2
ORDER BY t.column1, t.column2;

-- 2. 保留每組第一筆,刪除其餘重複(需配合 ROW_NUMBER)
WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id) AS rn
    FROM tableName
)
DELETE FROM tableName WHERE id IN (SELECT id FROM cte WHERE rn > 1);

適用資料庫

MySQL、PostgreSQL、SQL Server、Oracle、SQLite 皆支援上述標準 SQL 寫法(ROW_NUMBER 需 8.0+/10g+ 版本)。

實務建議

  1. 建立主鍵/唯一索引前,先跑此查詢確認零重複。
  2. 大表建議先抽樣或加上 WHERE 縮小範圍。
  3. 刪除重複前務必備份或在交易中測試。

收藏此查詢模板,下次遇到「無法建立主鍵」錯誤時,一鍵定位問題根源。

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