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:以上写法为了好看,不区分大小写,大家在测试的时候记得自行修改呀~