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

SQL数据库开发

共 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,获取一份精心整理的技术干货
后台回复关键字:进群,带你进入高手如云的交流群。

           
推荐阅读
              
              

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

手机扫一扫分享

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

手机扫一扫分享

分享
举报