Mysql

如何去除mySQL中組合的第二次重複

  • February 8, 2017

在此處輸入圖像描述

我有一個像上面那樣的數據表,不幸的是,重複發生了。如何刪除第 2、第 3 和第 4 列的重複組合,我需要使這三列在組合中唯一。

請幫助編寫查詢來執行此操作,因為有 13000+ 行,所以手動編輯幾乎是不可能的。

提前致謝!

完成後,請務必添加此內容,以免重複行:

UNIQUE(exam, name, subject)

計劃A:

對於該查詢(並假設它完成了所需的任務),擁有INDEX(exam, name, subject, id).

建議您以安全的方式對其進行測試…創建另一個表並在那裡嘗試。

CREATE TABLE test LIKE tablename;
ALTER TABLE test ADD INDEX(exam, name, subject, id);
INSERT INTO test
   SELECT * FROM tablename;
DELETE ...
...look at results...

如果不正確,DROP TABLE test請重試。

如果看起來不錯,則通過將良好結果移動到位來完成:

RENAME TABLE tablename TO old,
            test to tablename;
DROP TABLE old;

B計劃:

CREATE TEMPORARY TABLE tmp
   SELECT MIN(id) AS id FROM tablename
       GROUP BY exam, name, subject;
DELETE tablename
   FROM tablename
   LEFT JOIN tmp  USING(id)
   WHERE tmp.id IS NULL;

(同樣,您可能應該在副本上對其進行測試。)

計劃 C:甚至更簡單,假設您不在乎為額外的列獲得什麼數據:

CREATE TABLE new
   SELECT * FROM tablename
       GROUP BY exam, name, subject;
... check table `new` ...
RENAME TABLE tablename TO old,
            new to tablename;
DROP TABLE old;

也就是說,它不一定會給你第一個id. 如果你有一個“新”版本的 MySQL,你可能需要一個特殊的設置來關閉“only full group by”。

引用自:https://dba.stackexchange.com/questions/163569