首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用子选择的Exasol更新表

使用子选择的Exasol更新表
EN

Stack Overflow用户
提问于 2020-05-06 16:51:09
回答 1查看 337关注 0票数 0

我得到了这样一条语句,它在Oracle中有效:

代码语言:javascript
复制
update table a set
a.attribute = 
    (select 
        round(sum(r.attribute1),4)
     from table2 p, table3 r
     where 1 = 1
     and some joins
    )                 
where 1 = 1
and a.attribute3 > 10 
;

现在,我想在Exasol DB中执行相同的语句。但我得到错误代码:1665921074538906818,SQL状态: 0A000功能不支持:这种相关子选择(会话: 1665921074538906818)

经过一些研究,我发现您需要使用以下语法编写查询:

代码语言:javascript
复制
UPDATE table a 
set a.attribute = r.attribute2
FROM table a, table2 p, table3 r
     where 1 = 1
     and some joins
     and a.attribute3 > 10; 

问题是我不能取r.attribute2的和。所以我得到了不稳定的行集。有没有办法在Exasol DB中执行第一个查询?

感谢大家的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-19 07:45:53

下面的SQL UPDATE语句适用于table1和table2之间的连接是一对一的情况(或者如果目标表和连接的结果集之间存在一对一的关系)

在这种情况下,将更新目标表val列,否则将返回错误

代码语言:javascript
复制
UPDATE table1 AS a
    SET a.val = table2.val
FROM table1, table2
WHERE table1.id = table2.id;

另一方面,如果联接导致单个table1行多次返回,则会引发不稳定错误。

如果您想对乘法行的列值求和,也许下面的方法会有所帮助

首先在table1的基础上对table2的所有行求和,并将此子选择用作新的临时表,然后在UPDATE FROM语句中使用此语句

代码语言:javascript
复制
UPDATE table1 AS a
    SET a.val = table2.val
FROM table1
INNER JOIN (
    select id, sum(val) val from table2 group by id
) table2
    ON table1.id = table2.id;

我尝试使用两个表来解决这个问题,在本例中,您可能会在subselect语句中使用table2和table3

我希望这就是你要找的答案

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61631080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档