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
希望这就是您要找的答案
我得到了这个在 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希望这就是您要找的答案