SQL 42) 删除emp_no重复的记录

删除emp_no重复的记录,只保留最小的id对应的记录。

http://www.nowcoder.com/questionTerminal/3d92551a6f6d4f1ebde272d20872cf05

错误方法)
DELETE FROM titles_test
WHERE id NOT IN(
    SELECT MIN(id)
    FROM titles_test
    GROUP BY emp_no);
MySQL中不允许在子查询的同时删除表数据(不能一边查一边把查的表删了)

正确方法)
DELETE FROM titles_test
WHERE id NOT IN(
    SELECT * FROM(
    SELECT MIN(id)
    FROM titles_test
    GROUP BY emp_no)a);  -- 把得出的表重命名那就不是原表了(机智.jpg

SQL 文章被收录于专栏

SQL

全部评论
我也想知道,第一个子查询里为啥用select * , 而不用select id 咧
2 回复 分享
发布于 2021-09-19 13:18
求教为什么还需要select *呢?
2 回复 分享
发布于 2021-09-18 10:40
求教 子查询里 不是应该groupby 后面的必须都放到select后吗? 为什么只有一个min也行呢?
1 回复 分享
发布于 2021-11-11 22:35
关于select *的问题,如果想要使用 select id ,需要这么写: delete from titles_test where id not in (select id from (select min(id) as id from titles_test GROUP BY emp_no) a); 也就是要将min()这一列的名称命名为id
9 回复 分享
发布于 2021-11-18 12:42
你们抓周树人,关我鲁迅什么事。
8 回复 分享
发布于 2021-07-29 13:34
谢谢,但是我不理解,用了select*和查询的ID就不对应了呢
1 回复 分享
发布于 2021-06-12 15:30
为啥不能不删除,而是找出id在表1(找出每个emp_no里对应的最小id的表1)的记录呢?代码如下: select * from titles_test where id in ( select min(id) from titles_test group by emp_no )
点赞 回复 分享
发布于 2025-06-02 14:48 河北
DELETE FROM titles_test WHERE id NOT IN( select * from( select * from titles_test group by emp_no having min(id) a)) 求解,这个为什么会报错呢
点赞 回复 分享
发布于 2024-07-16 09:28 重庆
无敌了
点赞 回复 分享
发布于 2023-03-12 21:26 江苏
请问各位 not in 为什么不可以替换成 != 呢?
点赞 回复 分享
发布于 2022-04-12 10:17
错了哦
点赞 回复 分享
发布于 2022-03-14 23:09
请教一下,最后面的“a”是什么意思?别名吗?
点赞 回复 分享
发布于 2022-03-06 09:04
被命名的a表应是一列最小ID吧?为什么我只执行子查询出现的是一模一样的原表呢?
点赞 回复 分享
发布于 2022-02-23 12:17
太妙了~
点赞 回复 分享
发布于 2021-10-18 15:34
你可真棒棒啊
点赞 回复 分享
发布于 2021-08-23 17:19
机智.jpg
点赞 回复 分享
发布于 2021-08-23 09:44
不对啊,过不了
点赞 回复 分享
发布于 2021-06-29 21:21

相关推荐

评论
251
17
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务