【问题标题】:Exasol Update Table using subselect使用子选择的 Exasol 更新表
【发布时间】:2020-08-21 04:08:36
【问题描述】:

我得到了这个在 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 exasolution exasol


    【解决方案1】:

    如果 table1 和 table2 之间的 JOIN 是一对一的(或者如果目标表和 JOIN 的结果集之间存在一对一的关系),则以下 SQL UPDATE 语句将起作用

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

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

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

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

    先在table1的bases中对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

    我希望这是您正在寻找的答案

    【讨论】:

    • 感谢您的回答,正是我想要的:)
    猜你喜欢
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    相关资源
    最近更新 更多