当前位置: 首页 > 知识库问答 >
问题:

Tarantool Sql更新加入支持

邵骁
2023-03-14

在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);

这是我在运行update命令时遇到的错误:

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驱动程序来运行查询,如果这有什么不同的话。

共有1个答案

罗翔
2023-03-14

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

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

我们的SQL方言源于SQLite,所以您也可以检查这个相关的答案:在SQLite中使用Join更新

 类似资料:
  • 我有一个Employee实体(Employee(id,name,company_id)): 一个公司可以有更多的员工,但一次有一个员工属于一个公司。我加入了他们(我希望获得状态为1的员工),并将cascade设置为all,但当我将员工更新为另一个公司时,该公司的employeeSet不会刷新,旧公司也不会刷新,新公司也不会刷新。这是员工的更新方法: 我也尝试过更新(雇员),但没有成功。我从代码中遗

  • 问题内容: 我有一个应用程序,需要通过大量条目更新大量数据。基本上,它执行约7,000次插入和/或更新,但需要花费很长的时间(例如将近9分钟…平均每个查询约0.08秒)。从本质上讲,我正在寻求提高速度来处理多个此类请求(我不希望对我模糊的示例提出具体的答案……只是希望,可以帮助解释)。 以下是对请求进行概要分析的一些示例: 重复一遍恶作剧(大约7,000次)。这是一个更新,它收集在24小时内定期生

  • 问题内容: 我想更新一个表以指示某些行是其他行的父表,因此我在表中添加了“父代”列。以下查询查找所有父母: 但是当我尝试修改该语法以进行更新时,它不起作用: 我得到: 请注意,第7行第28列是“ SET”行的结尾。 问题答案: Oracle不支持语句中的子句。 用这个:

  • 日期 文档版本 说明 作者 2016-08-23 V1.0 创建钱麦系统开发对接文档 钱麦产品和技术团队等 2016-08-30 V1.1 修改一些参数命名 刘树智 2016-08-31 V1.2 修改部分参数命名,更新参数说明 谢静、黄小龙 2016-09-06 V1.3 修改部分参数描述 技术团队 2016-09-09 V1.4 补充主动通知说明 谢静 2016-09-18 V1.5 消费指定

  • 问题内容: 如何更新子查询中也存在的表?我必须分两个阶段进行吗?(创建一个临时表-将选定的数据放入其中,然后更新最终表) 我正在尝试使用每个CTN的网络标签更新invoiceLine表。 最终结果将是: invoiceLine 我有以下表格: invoiceLine ctn network 1234 null 2345 null 3456 null terminal ctn network 123

  • 我刚接触熊猫,似乎无法使用合并功能: 对于列a上的左连接,我想通过连接键更新公共列。注:c列中的最后一个值来自左表,因为不存在匹配项。 我应该如何使用Pandas merge函数来实现这一点?非常感谢。