### 创建测试表 t_student
CREATE TABLE `t_student` (
`id` bigint(12) NOT NULL AUTO_INCREMENT,
`name` varchar(12) NOT NULL DEFAULT '""',
`sex` int(4) DEFAULT NULL,
`age` int(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
插入测试数据, 存在部分数据重复
1. 使用NO IN 删除
DELETE FROM `t_student` WHERE id NOT IN
(SELECT * FROM (SELECT MIN(id) FROM t_student GROUP BY `name`,sex,age) T );
2. 使用 IN 删除
DELETE FROM t_student WHERE
(`name`,sex,age) IN
(SELECT * FROM (SELECT `name`, sex, age FROM `t_student` GROUP BY NAME,sex,age HAVING COUNT(id)>1) T1)
AND id NOT IN
(SELECT * FROM (SELECT MIN(id) FROM `t_student` GROUP BY `name`,sex,age HAVING COUNT(id)>1) T2);
注意点:更新表时 不能在set和where中用子查询查询同表数据。可以使用别名再次查询 或者使用别名进行关联查询 进行处理
### 错误示范:
DELETE FROM t_student WHERE id IN (SELECT id FROM t_student WHERE id=1);
### 正确示范:
DELETE FROM t_student WHERE id IN (SELECT * FROM (SELECT id FROM t_student WHERE id=1) T);