1. 程式人生 > >MySQL刪除重複資料的解決方案

MySQL刪除重複資料的解決方案

對於重複的資料,有兩種情況:
1️⃣兩行資料完全相同
2️⃣某欄位相同
3️⃣id不同,其他欄位相同


第1️⃣種情況的解決方案:

思路:
1.查出表中所有行,不顯示重複行。
2.建立一張臨時表,儲存查到的新表資料。
3.刪除原表資料
4.把臨時表的資料插入到原表中。
5.刪除臨時表

sql:
CREATE TABLE 臨時表 AS (SELECT DISTINCT * FROM 原表);

DELETE FROM 原表;

INSERT INTO 原表 (SELECT * FROM 臨時表);

DROP TABLE 臨時表;


第2️⃣種情況的解決方案:

思路:


1.查出表中有重複的行。
2.建立一張臨時表,唯一地儲存有重複的資料。
3.刪除原表中所有重複的資料
4.把臨時表的唯一重複資料插入到原表中。
5.刪除臨時表

sql:
CREATE TABLE 臨時表 AS (SELECT * FROM 原表
GROUP BY 欄位1
HAVING COUNT(欄位1)>1);

DELETE FROM 原表 WHERE 欄位1 IN
(
SELECT * FROM (SELECT 欄位1 FROM 原表
GROUP BY 欄位1
HAVING COUNT(欄位1) > 1) 別名
)

INSERT INTO 原表 (SELECT * FROM 臨時表);

DROP TABLE 臨時表;


第3️⃣種情況的解決方案:
思路:
1.查出所有記錄的最大id(這樣就可以過濾掉其他id不同的相同記錄),根據任意一個欄位分類。(這樣查出來的記錄就是無重複的整表記錄)
2.刪除不在記錄中的資料(重複的資料)

sql:
DELETE FROM 原表 WHERE id NOT IN (
SELECT * FROM (
SELECT MAX(id) FROM 原表 GROUP BY 欄位1) 別名
)
或:
DELETE FROM 原表 WHERE id NOT IN (
SELECT * FROM (
SELECT MIN(id) FROM 原表 GROUP BY 欄位1) 別名
)