概述:
本章内容主要讲一下,软件开发工程师笔试过程中,经常遇到的一道SQL笔试题!虽然题目不是很难,但引无数英雄竞折腰!
今天闲来无事,2021年最后一更!年初又是招聘与跳槽的高峰季了,未雨绸缪,有备无患!
该题目分成俩种模式,第一种是ID,其他列均重复,这种情况现实开发中,已经很难出现了!第二种方式ID不重复,其他列重复,这种情况还是有可能出现的,当恶意刷表单,或者设计漏洞,可能会导致该情况的出现。
首先来看一下,第一种模式的解决思路,先整理好数据脚本!
CREATE TABLE RPEAT_ONE
(
ID INT,
NAME VARCHAR(20)
)
INSERT INTO RPEAT_ONE SELECT 1,'A'
INSERT INTO RPEAT_ONE SELECT 1,'A'
INSERT INTO RPEAT_ONE SELECT 1,'A'
INSERT INTO RPEAT_ONE SELECT 2,'B'
INSERT INTO RPEAT_ONE SELECT 2,'B'
INSERT INTO RPEAT_ONE SELECT 2,'B'
INSERT INTO RPEAT_ONE SELECT 3,'C'
简单、粗暴,不需要动脑,直接硬撸!撸出一片天地!将数据的唯一项查询出来,保存到临时表中,随后清表,然后再插回来!
SELECT DISTINCT ID,NAME INTO #TEMP_RPEAT_ONE FROM RPEAT_ONE
TRUNCATE TABLE RPEAT_ONE
INSERT INTO RPEAT_ONE SELECT * FROM #TEMP_RPEAT_ONE
接下来看第二种方式,如何解决?先整理好数据脚本!
CREATE TABLE RPEAT_TWO
(
ID INT,
NAME VARCHAR(20)
)
INSERT INTO RPEAT_TWO SELECT 1,'A'
INSERT INTO RPEAT_TWO SELECT 2,'A'
INSERT INTO RPEAT_TWO SELECT 3,'A'
INSERT INTO RPEAT_TWO SELECT 4,'B'
INSERT INTO RPEAT_TWO SELECT 5,'B'
INSERT INTO RPEAT_TWO SELECT 6,'B'
INSERT INTO RPEAT_TWO SELECT 7,'C'
这种方式相对容易,我们只需要保存每个重复名字,对应的最小ID或者最大ID即可!其余的全部删除,拿名字列作为分组聚合条件,进行筛选,随后删除,即可一劳永逸地解决问题!
DELETE FROM RPEAT_TWO
WHERE ID NOT IN
(
SELECT MIN(ID) AS ID FROM RPEAT_TWO
GROUP BY Name
)
总结一下:
以上就是关于上述题目的简单解决方案,题目虽然不难!对于新入行或者想跳槽的小伙伴,在短时间内答题,可能还是略显仓促,还是需要平时多积累,这样才能从容应对!
喜欢的小伙伴可以关注我,一起交流学习!我是IT鸟叔,一位喜欢写程序、钓鱼、喝茶、玩游戏的中年大叔!