我得到了这样一条语句,它在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中执行相同的语句。但我得到错误代码:1665921074538906818,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中执行第一个查询?
感谢大家的帮助!
发布于 2020-05-19 07:45:53
下面的SQL UPDATE语句适用于table1和table2之间的连接是一对一的情况(或者如果目标表和连接的结果集之间存在一对一的关系)
在这种情况下,将更新目标表val列,否则将返回错误
UPDATE table1 AS a
SET a.val = table2.val
FROM table1, table2
WHERE table1.id = table2.id;另一方面,如果联接导致单个table1行多次返回,则会引发不稳定错误。
如果您想对乘法行的列值求和,也许下面的方法会有所帮助
首先在table1的基础上对table2的所有行求和,并将此子选择用作新的临时表,然后在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;我尝试使用两个表来解决这个问题,在本例中,您可能会在subselect语句中使用table2和table3
我希望这就是你要找的答案
https://stackoverflow.com/questions/61631080
复制相似问题