各种业务场景下的sql语句

目录

1.mysql

1.1按表中最小的id去除其他重复数据

1.2将a表数据添加到b表(如果b表已经存在数据则不添加)

1.3联表更新(将a表数据与b表数据关联进行更新b表字段)

1.4将字符类型的数据按整型的顺序来进行排序

1.5选取第8条开始的连续6条数据

 

2.Oracle

2.1按出生日期计算当前年龄

2.2两表关联,重复数据只取第一条

2.3用字符串类型年薪的上下限换算成月薪


1.mysql

1.1按表中最小的id去除其他重复数据

delete from `fh_pc_company` where id not in 
(select a.id from 
(SELECT min(id) id,name FROM `fh_pc_company` group by name)a)

1.2将a表数据添加到b表(如果b表已经存在数据则不添加)

tableB中的字段是(id,name,tb_id,tb_name),tableA中的字段是(id,name)

其中tableB中的tb_name字段代表从哪个表插进来,tb_id代表插进来的数据在原表中的id

insert into tableB(name,tb_id,tb_name) 
select a.name,a.id,"tableA" from tableA a 
where not EXISTS(select id from tableB 
where tb_id = a.id and tb_name = 'tableA')

1.3联表更新(将a表数据与b表数据关联进行更新b表字段)

update tableB b,tableA a set b.name=a.name where b.id=a.id

1.4将字符类型的数据按整型的顺序来进行排序

将Records中的recordsNum字段按数字类型进行排序,如003,002,001,在排序时会当成3,2,1来排序

select * from Records order by recordsNum+0 asc;

1.5选取第8条开始的连续6条数据

select * from tableA limit 7,6

 

2.Oracle

2.1按出生日期计算当前年龄

select TRUNC((to_char(sysdate, 'yyyyMMdd') - to_char(a.birthday, 'yyyyMMdd')) /10000)
 as age from tableA a

2.2两表关联,重复数据只取第一条

a表、b表两表关联,关联出来的结果中,a和b是一对多的关系,而我们只需要其中一条(按某字段来筛选) 

如a,b表数据如下:

执行sql后的需要的结果:

select a.name,t.company from a left join 
(select b.company,b.person_id from 
    (select b. *,(row_number() over(partition by company order by orderId desc)) su
     from b) e 
where su = 1) t
on a.id = t.person_id;

2.3用字符串类型年薪的上下限换算成月薪

select ((position.CCE329+0)+(position.CCE330+0))/24 as money from tableA

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrZhouGx

觉得对你有用的话可以支持一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值