前言
MySQL支持多表更新语句,如果迁移到YashanDB,推荐通过兼容性参数来支持。如果兼容性参数支持存在问题的话,也可以按照多表更新的规则进行改写。
问题
在YashanDB默认模式下执行MySQL的多表更新语句,报错YAS-04344 multi-table update is not supported,请看示例:
SQL> update t1, t2 set t1.c2=t2.c2 where t1.c1=t2.c1;
YAS-04344 multi-table update is not supported
解决方法
YashanDB使用兼容参数
SQL> update t1, t2 set t1.c2=t2.c2 where t1.c1=t2.c1;
YAS-04344 multi-table update is not supported
SQL> ALTER SYSTEM SET SQL_PLUGIN = 'MYSQL';
Succeed.
SQL> update t1, t2 set t1.c2=t2.c2 where t1.c1=t2.c1;
1 rows affected.
改写多表更新SQL
SQL> update t1 set t1.c2=(select t2.c2 from t2 where t2.c1=t1.c1) where exists (select * from t2 where t2.c1 = t1.c1);
1 rows affected.
常见的改写方法
至于更详细的改写方法,我们举例说明。假设有两张表Area和Branches_Test,表Area定义如下:
CREATE TABLE Area(
AREA_NO CHAR(2),
COUNTRY_NO CHAR(2),
AREA_NAME VARCHAR(60),
DHQ VARCHAR(20),
PRIMARY KEY ("AREA_NO")
)
表Area数据如下:
SQL> select * from Area;
AREA_NO COUNTRY_NO AREA_NAME DHQ
----------------- ----------------- ---------------------------------------------------------------- ----------------------------------------------------------------
01 CN 华东 Shanghai
02 CN 华西 Chengdu
03 CN 华南 Guangzhou
04 CN 华北 Beijing
05 CN 华中 Wuhan
5 rows fetched.
表Branches_Test如下:
CREATE TABLE Branches_Test(
BRANCH_NO CHAR(4),
BRANCH_NAME VARCHAR(200) NOT NULL ENABLE,
ADDRESS VARCHAR(200),
AREA_NO CHA

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



