是否可以逐行处理SQLite更新状态以帮助解决"sqlite calculate columns based on columns"



我有一个表,其中包含大量基于其他计算列的计算列。所以有:

x, f(x(,g(f(x((,h(g(x(...等等。每个函数都使用大量字段,因此从第一原理写出公式既乏味又容易出错。

我知道这个使用子查询的解决方案。但是,随着列基于其他计算列进行计算,这变得越来越不切实际,而这些计算列本身就是计算的。 每个计算级别都需要一个子查询。对于像我这样的宽表,这很容易出错。

我想到了一个不同的解决方案,即首先用虚拟数字填充计算列,然后使用 UPDATE 按所需顺序计算列。

这是一个 MWE(不是真实的东西(:

create table a (x ,y,z);
insert into  a(x,y,z)
values (1,1,1),(2,1,1);
update a
set y = x, 
z = 7 * y;
select * from a;

目前这不起作用,z的计算使用未刷新的值 y。

要解决此问题,我必须将更新语句分开

update a
set y = 3 * x;
update a
set z = 7 * y;

我的问题:有没有办法告诉SQLITE完成UPDATE语句中第一行的计算,然后进行处理,这样我就可以将所有计算捆绑在一个UPDATE语句下?

我知道的唯一一个在UPDATE语句中使用表达式中列的更改值的数据库是 MySql。
标准行为是使用存储的值。
在您的情况下,有一个简单的解决方案。
y的新值是3 * x所以,而不是:

z = 7 * y

用:

z = 7 * (3 * x)

z = 21 * x

您的陈述将是:

update a
set y = 3 * x, 
z = 21 * x;

请参阅演示。
结果:

| x   | y   | z   |
| --- | --- | --- |
| 1   | 3   | 21  |
| 2   | 6   | 42  |

最新更新