【问题标题】:Tarantool Sql Update Join SupportTarantool Sql 更新加入支持
【发布时间】:2020-09-21 15:33:30
【问题描述】:

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),
    (2,120000,1),
    (3,80000,3),
    (4,900000,4),
    (5,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 驱动程序来运行查询,如果这有什么不同的话。

【问题讨论】:

    标签: tarantool


    【解决方案1】:

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 2015-07-18
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 2011-12-20
      相关资源
      最近更新 更多