Tarantool Sql更新加入支持

问题描述

tarantool支持更新联接吗?我正在检查tarantool sql参考,但找不到任何示例。 当我尝试使用类似于以下查询查询时,出现错误

UPDATE
    COMMISSIONS
SET
    COMMISSIONS.COMMISSION = 
        COMMISSIONS.BASE_AMOUNT * TARGETS.PERCENTAGE
FROM 
    COMMISSIONS
    INNER JOIN TARGETS
        ON COMMISSIONS.TARGET_ID = TARGETS.TARGET_ID;

这是架构定义:

CREATE TABLE COMMISSIONS
(
    STAFF_ID    INTEGER PRIMARY KEY,TARGET_ID   INTEGER,BASE_AMOUNT INTEGER,COMMISSION  INTEGER
);

CREATE TABLE TARGETS
(
    TARGET_ID  INTEGER  PRIMARY KEY,PERCENTAGE INTEGER
);


INSERT INTO 
    TARGETS(TARGET_ID,PERCENTAGE)
VALUES
    (1,20),(2,30),(3,50),(4,60),(5,80);
    
   
INSERT INTO 
    COMMISSIONS(STAFF_ID,BASE_AMOUNT,TARGET_ID)
VALUES
    (1,100000,2),120000,1),80000,3),900000,4),950000,5);

这是我运行更新命令时遇到的错误

Caused by: org.tarantool.TarantoolException: Syntax error at line 1 near '.'
    at org.tarantool.TarantoolBase.serverError(TarantoolBase.java:31)
    at org.tarantool.TarantoolClientImpl.complete(TarantoolClientImpl.java:571)
    at org.tarantool.TarantoolClientImpl.readThread(TarantoolClientImpl.java:491)
    at org.tarantool.TarantoolClientImpl.lambda$startThreads$1(TarantoolClientImpl.java:238)
    at java.base/java.lang.Thread.run(UnkNown Source)

PS:如果有什么不同,我正在使用dbeaver + tarantool jdbc驱动程序来运行查询

解决方法

您可以使用子查询,如下所示:

UPDATE COMMISSIONS SET COMMISSION = 
(
    SELECT COMMISSIONS.BASE_AMOUNT * TARGETS.PERCENTAGE 
    FROM TARGETS 
    WHERE COMMISSIONS.TARGET_ID = TARGETS.TARGET_ID
);

我们的SQL方言源自SQLite,因此您也可以检查以下相关答案:Update with Join in SQLite