问题分析
我们需要删除 titles_test
表中 emp_no
重复的记录,但保留每个 emp_no
的最小 id
对应的记录。具体步骤如下:
- 找出每个
emp_no
的最小id
。 - 删除那些
id
不是最小值的重复记录。
代码实现步骤
-
找出每个 emp_no 的最小 id:
SELECT MIN(id) AS min_id, emp_no FROM titles_test GROUP BY emp_no
- 这个子查询用于找出每个
emp_no
的最小id
。 GROUP BY emp_no
将数据按emp_no
分组。MIN(id)
找出每个分组中的最小id
。
- 这个子查询用于找出每个
-
选出最小值之外的数据:
- 将原表
titles_test
(别名为t1
)与子查询的结果(别名为t2
)进行连接。 ON t1.emp_no = t2.emp_no AND t1.id > t2.min_id
:- 确保只删除那些
id
大于最小id
的记录。
- 确保只删除那些
- 将原表
-
删除那些 id 不是最小值的重复记录:
DELETE t1
表示删除t1
(即原表titles_test
)中的记录。- 只有满足
JOIN
条件的记录会被删除。
完整代码
DELETE t1
FROM titles_test t1
JOIN (
SELECT MIN(id) AS min_id, emp_no
FROM titles_test
GROUP BY emp_no
) t2
ON t1.emp_no = t2.emp_no AND t1.id > t2.min_id;