当前位置: 首页> 文旅> 文化 > 【SQL】做项目时用到的语句整理(去重/多表关联)

【SQL】做项目时用到的语句整理(去重/多表关联)

时间:2025/7/11 19:29:49来源:https://blog.csdn.net/Meggie35/article/details/128900965 浏览次数:0次

1. 对日期去重(groupby)

需要:新建一张表,对原来表中的某个列(href)进行去重,并按照最新的日期进行排版

适用:如果有一张表,我们重复往里面存入数据,有一些除了日期以外,其他字段一样的内容写进去,这时候,我们需要按照最新日期进行数据去重。

主要的语句:group by

CREATE TABLE Table_new
SELECT href,ID,`status`,max(update_time) AS `update_time` 
#如果是功能性的词,要用引号框住
FROM Table_1
GROUP BY href;

原表:

数据重复,想要迭代最新的数据:在这里插入图片描述
结果:数据总算清干净了在这里插入图片描述

2.两表关联,附表补充主表(Left join):

2.1 需要:

有两个表,其中两个表的数据大量交叉重复,如果我们想要两个表的数据合并,用附表补充主表,构建一个新的表,对两个表的内容做去重,这时候可以用left join 的方法对两个表关联并做去重。而附表的一些字段需要做筛选,且需要其他字段一对一能匹配得上;

例子:在两个表Table_1和Table_2之间,选取Table_1的整个表,且保证选取字段列net是能一 一对应得上的,同时附表Table_2的状态status为1 的部分;

这种情况适用于,主表Table_1可能没有状态值的这一项,需要关联附表Table_2,筛选出状态值为1 的选项,最后为Table_1做补充。

方法:使用左连接LEFT JOIN ,也就是左边表的所有部分;从附表b的数据,用来补充主表a的数据,这里是找某一项是同类项。

CREATE TABLE Table_new
select a.* 
from table_1 a #把这个表命名为a
LEFT JOIN (select * from table_2 where status=1) b  
on a.net=b.net

(实现逻辑如下,蓝色部分为Table_new)在这里插入图片描述

结果:如果在右表中找到了匹配的记录,结果集中会包含左表的记录加上右表匹配的记录

2.2 需要:
如果想要两个表的数据合并,需要附表补充主表,而同时附表需要一些限定条件,这时在上面的基础上加上where的限制条件;

举个例子:

主表Table_1完成的是,已经完成网址项的表,但是因为有时候我们在某一项是空的时候,运行的过程会空的网址的项也运行完了,以此需要筛选出,这部分被误标记status=1且网址为空的表出来。

而这部分空网址在附表Table_2里。现在需要将Table_1的已经完成的部分,加上Table_2中status=1且net=null的数据,组成Table_new。

逻辑图如下:在这里插入图片描述

方法:使用左连接LEFT JOIN ,也就是左边表Table_1的所有部分;而附表有两个限制条件,一个是状态值,一个是筛选 的数据,用来补充主表a的数据,而增加对b的限制。

我们先用其中一个筛选条件——状态值

CREATE TABLE Table_new
select a.* #
from table_1 a #选取第一个表 并命名为a
LEFT JOIN (select * from table_2 where status=1) b 
on a.net=b.net
where b.net is null#大小写是为了看得顺眼,大家写的时候建议都改成大写呀

两表关联建新表,可以对两个表的数据整合出来,如果想要去重,可以在新表的设计表弄key, 例如上面的例子,给net字段弄个key,作为表的唯一项来去重。

2.3. 倒序筛选

select table_1.* ,table_2. url from table_1
left join table_2  on  table_1.ID=table_2.ID
order by create_time desc limit 20;

以上的做法是, 选取两个表之间,其中某一项的相同的数据。有时候有些表以ID命名关联,但是有些表的一些列在另一个表里,因此需要关联两个表。例如下面的例子是ID 相同,表1的所有部分,以日期倒叙。

3. 选取某字段不重复的数据:

选取表里某一个字段的不重复数据

主要方法:distinct

select distinct Problem from table_1 
where update_time >='2021-01-01 10:00:00'

PS:以上写法为了好看,不区分大小写,大家在测试的时候记得自行修改呀~

关键字:【SQL】做项目时用到的语句整理(去重/多表关联)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: