【严肃警告】通报全体,公司没有午休这件事,从未有过,谁在中午午休立刻走人,没有下次!

共 3857字,需浏览 8分钟

 ·

2024-05-23 16:00



点击关注公众号,SQL干货及时获取



后台回复:1024,获取海量学习资源


SQL刷题专栏





SQL145题系列







今天看到个奇葩帖,内容如下:



这类奇葩公司不知大家是否遇到过,反正我是真没见过。


以往待过的公司,也一直执行着:“中午不睡!下午崩溃!”的理念。


午休这真的是太正常的需求了。


要说真遇到项目紧急需要支持时,我相信几乎所有员工都是可以接受的。


但要说“谁在午休立刻走人,没有下次!”,我还从未见过如此XXXX之人!





这样的公司,想想就知道根本留不住人。


稍微技术好点的,能换一家公司的,谁还会在这地方受气呢?




以下是今天的SQL干货


今天给大家介绍一下遇到大批量插入的时候,如何去除重复数据。


测试数据



CREATE TABLE `animal` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
);


INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('1', 'cat', '12');
INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('2', 'dog', '13');
INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('3', 'camel', '25');
INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('4', 'cat', '32');
INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('5', 'dog', '42');


目标


去掉name重复的数据。


先筛选出重复数据



SELECT name,count( 1 ) 
FROM
 student
GROUP BY
NAME 
HAVING
count( 1 ) > 1;


 


输出:




name count(1)
cat 2
dog 2



name为cat和dog的数据重复了,每个重复的数据有两条;


删除全部重复数据,一条不留


直接删除会报错



DELETE 
FROM
 student
WHERE
 NAME IN (
 SELECT NAME 
 FROM
  student
 GROUP BY
 NAME 
HAVING
count( 1 ) > 1)


报错:1093 - You can't specify target table 'student' for update in FROM clause, Time: 0.016000s


原因是:更新这个表的同时又查询了这个表,查询这个表的同时又去更新了这个表,可以理解为死锁。mysql不支持这种更新查询同一张表的操作


解决办法:把要更新的几列数据查询出来做为一个第三方表,然后筛选更新。



DELETE 
FROM
 student
WHERE
 NAME IN (
 SELECT
  t.NAME
FROM
 ( SELECT NAME 
FROM student
GROUP BY NAME 
HAVING count( 1 ) > 1 
) t
)


删除表中删除重复数据,仅保留一条 在删除之前,我们可以先查一下,我们要删除的重复数据是啥样的



SELECT
 *
FROM
 student
WHERE
 id NOT IN (
 SELECT
  t.id
 FROM
 ( SELECT MIN( id ) AS id FROM student GROUP BY `name` ) t
 )


啥意思呢,就是先通过name分组,查出id最小的数据,这些数据就是我们要留下的火种,那么再查询出id不在这里面的,就是我们要删除的重复数据。


开始删除重复数据,仅留一条 很简单,刚才的select换成delete即可



DELETE 
FROM
 student
WHERE
 id NOT IN (
 SELECT
  t.id
 FROM
 ( SELECT MIN( id ) AS id FROM student GROUP BY `name` ) t
 )
















最后给大家分享我写的SQL两件套:《SQL基础知识第二版》《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。




有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行



数据前线








——End——




后台回复关键字:1024,获取一份精心整理的技术干货


后台回复关键字:进群,带你进入高手如云的交流群。






推荐阅读









浏览 486
1点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
1点赞
评论
收藏
分享

手机扫一扫分享

分享
举报