MySQL的update...inner join...on语法到HGDB的迁移(APP)

环境

系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:4.5

文档用途

客户的源库是MySQL,SQL语句中使用了update tableA inner join tableB on 条件 set …的语法,

即tableA和tableB结合,用tableB的字段值更新tableA的字段。示例如下:

①inner join的写法

update tb_user t1

inner join (

select * from tb_user where dt = 'bl'

) t2

on t1.dt = 'sf' and t1.pkfi = t2.pkfi

set t1.name = t2.name, t1.age = t2.age, t1.sex = t2.sex;

②不使用inner join的写法

update tb_user t1

, (

select * from tb_user where dt = 'bl'

) t2

set t1.name = t2.name, t1.age = t2.age, t1.sex = t2.sex

where t1.dt = 'sf' and t1.pkfi = t2.pkfi;

在HGDB中暂时不兼容该语法,需要通过修改SQL语句实现。即把inner join后面的语句,一直到on的条件语句,

都移动到set的后面,然后inner join改成from,on改成where。修改后如下:

update tb_user t1

set t1.name = t2.name, t1.age = t2.age, t1.sex = t2.sex

from (

select * from tb_user where dt = 'bl'

) t2

where t1.dt = 'sf' and t1.pkfi = t2.pkfi;

详细信息

MySQL的update…inner join…on语法到HGDB的迁移示例:

测试数据准备:

create table tb_user(id int,name varchar(20),age int,sex varchar(10),dt varchar(2),pkfi int ,primary key(id));

insert into tb_user values(1,'张三1','10','男','sf',1);

insert into tb_user values(2,'张三2','20','女','sf',2);

insert into tb_user values(3,'张三3','30','男','sf',3);

insert into tb_user values(4,'张三4','40','女','sf',4);

insert into tb_user values(5,'李四1','50','女','bl',1);

insert into tb_user values(6,'李四2','60','男','bl',2);

insert into tb_user values(7,'李四3','70','女','bl',3);

insert into tb_user values(8,'李四4','80','男','bl',4);

MySQL测试:

①执行检索,查看更新前数据
在这里插入图片描述
②执行更新

update tb_user t1

inner join (

select * from tb_user where dt = 'bl'

) t2

on t1.dt = 'sf' and t1.pkfi = t2.pkfi

set t1.name = t2.name, t1.age = t2.age, t1.sex = t2.sex;

③查看更新结果,dt字段是sf的记录被更新了
在这里插入图片描述
HGDB中替换方案测试:

①执行检索,查看更新前数据
在这里插入图片描述
②执行更新

update tb_user t1

set t1.name = t2.name, t1.age = t2.age, t1.sex = t2.sex

from (

select * from tb_user where dt = 'bl'

) t2

where t1.dt = 'sf' and t1.pkfi = t2.pkfi;

③查看更新结果,dt字段是sf的记录被更新了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值