【严肃警告】通报全体,公司没有午休这件事,从未有过,谁在中午午休立刻走人,没有下次!
共 3857字,需浏览 8分钟
·
2024-05-23 16:00
点击关注公众号,SQL干货及时获取
今天看到个奇葩帖,内容如下:
这类奇葩公司不知大家是否遇到过,反正我是真没见过。
以往待过的公司,也一直执行着:“中午不睡!下午崩溃!”的理念。
午休这真的是太正常的需求了。
要说真遇到项目紧急需要支持时,我相信几乎所有员工都是可以接受的。
但要说“谁在午休立刻走人,没有下次!”,我还从未见过如此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,获取一份精心整理的技术干货 后台回复关键字:进群,带你进入高手如云的交流群。
推荐阅读