表记录
mysql> select * from score_info;
+----+------+----------+-------+
| id | name | class_no | score |
+----+------+----------+-------+
| 1 | 张三 | 高三1班 | 100 |
| 2 | 张三 | 高三1班 | 100 |
| 3 | 张三 | 高三1班 | 98 |
| 4 | 李四 | 高三2班 | 88 |
| 5 | 王五 | 高三3班 | 90 |
| 6 | 王五 | 高三3班 | 92 |
+----+------+----------+-------+
SQL 语句
-- 删除 name 一样的重复记录
DELETE FROM score_info
WHERE id NOT IN (
SELECT t.id
FROM (
SELECT id
FROM score_info si
WHERE (
SELECT COUNT(1)
FROM score_info t
WHERE `name` = si.`name` AND id > si.id
) < 1
) t
);
-- 删除 name 一样的重复记录
DELETE FROM score_info
WHERE id IN (
SELECT t.id
FROM (
SELECT id
FROM score_info si
WHERE (
SELECT COUNT(1)
FROM score_info
WHERE `name` = si.`name` AND id > si.id
) > 0
)t
);
-- 删除除了 id 之外其他字段完全一样的重复记录
DELETE FROM score_info
WHERE id NOT IN (
SELECT t.id
FROM (
SELECT id
FROM score_info si
WHERE (
SELECT COUNT(1)
FROM score_info
WHERE `name` = si.`name` AND class_no = si.class_no AND
score = si.score AND id > si.id
) < 1
) t
);
-- 删除除了 id 之外其他字段完全一样的重复记录
DELETE FROM score_info
WHERE id IN (
SELECT t.id
FROM (
SELECT id
FROM score_info si
WHERE (
SELECT COUNT(1)
FROM score_info
WHERE `name` = si.`name` AND class_no = si.class_no AND
score = si.score AND id > si.id
) > 0
) t
);
# 从数据表s1表中把姓名相同且id大于s2表中的id的记录全部删除
delete s1
from score_info s1, score_info s2
where s1.name = s2.name and s1.id > s2.id
表结构
CREATE TABLE `score_info` (
`id` bigint(18) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`class_no` varchar(10) DEFAULT NULL,
`score` int(5) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;