【YashanDB知识库】YashanDB 支持MySQL多表更新语句的解决方法

前言

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值