Exasol 更新 Table 使用子选择

Exasol Update Table using subselect

我得到了这个在 Oracle 中有效的语句:

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 中执行相同的语句。但我收到错误 [代码:0,SQL 状态:0A000] 不支持的功能:这种相关子选择(会话:1665921074538906818)

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

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 中进行第一个查询?

感谢大家的帮助!

以下 SQL UPDATE 语句将适用于 table1 和 table2 之间的 JOIN 是 1 对 1(或者如果存在 1 对 1目标 table 和 JOIN 的结果集之间的关系)

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

UPDATE table1 AS a
    SET a.val = table2.val
FROM table1, table2
WHERE table1.id = table2.id;

另一方面,如果连接导致单个 table1 行出现多个 returns,则会引发 unstable 错误。

如果你想对相乘行的列值求和,也许下面的方法可以帮助

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

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;

我尝试使用两个 table 来解决问题 在您的情况下,您可能会在 subselect 语句

中使用 table2 和 table3

希望这就是您要找的答案