Mysql
如何去除mySQL中組合的第二次重複
我有一個像上面那樣的數據表,不幸的是,重複發生了。如何刪除第 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”。