1. 程式人生 > >mysql 刪除單表內多個欄位重複的資料

mysql 刪除單表內多個欄位重複的資料

遇到個問題,一個表內兩個欄位應該加上unique約束,但沒加導致出現重複資料,網上找到一條sql可以刪掉重複資料,原sql是這樣的:

DELETE from test 
WHERE (mid,uid) in 
(SELECT mid,uid FROM test GROUP BY mid,uid HAVING COUNT(*)>1) 
AND
id NOT in (SELECT id FROM test GROUP BY mid,uid HAVING COUNT(*)>1);

本地會出現這個錯誤

在子查詢的外面嵌一個select from 就可以了

DELETE from test 
WHERE (mid,uid) in 
(SELECT mid,uid from (SELECT mid,uid FROM test GROUP BY mid,uid HAVING COUNT(*)>1) s1) 
AND
id NOT in (SELECT id from (SELECT id FROM test GROUP BY mid,uid HAVING COUNT(*)>1) s2);


測試表

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `mid` int(11) NOT NULL,
  `uid` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=122 DEFAULT CHARSET=utf8