sqlite更新语句是否可以逐行处理以帮助解决问题;sqlite基于“列”计算列;

sqlite更新语句是否可以逐行处理以帮助解决问题;sqlite基于“列”计算列;,sqlite,sql-update,calculated-columns,Sqlite,Sql Update,Calculated Columns,我有一个表,其中包含大量基于其他计算列的计算列。因此有: x、 f(x)、g(f(x))、h(g(x)…等等。每个函数都使用大量字段,因此从第一原理写出公式既繁琐又容易出错 我知道使用子查询。但是,这变得越来越不切实际,因为列是基于其他计算列计算的,而这些计算列本身是计算出来的。对于每一级计算,您都需要一个子查询。对于像我这样的宽表,这很容易出错 我想到了另一种解决方案,首先用虚拟数字填充计算列,然后使用UPDATE按所需顺序计算列 这是一个MWE(不是真的): 目前这不起作用,并且z的计算使用

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

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

我知道使用子查询。但是,这变得越来越不切实际,因为列是基于其他计算列计算的,而这些计算列本身是计算出来的。对于每一级计算,您都需要一个子查询。对于像我这样的宽表,这很容易出错

我想到了另一种解决方案,首先用虚拟数字填充计算列,然后使用UPDATE按所需顺序计算列

这是一个MWE(不是真的):

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

为了解决这个问题,我必须分离update语句

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

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

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

z = 7 * y
使用:

你的声明将是:

update a
set y = 3 * x, 
    z = 21 * x;
请参阅。
结果:


好的,所以mysql不同于其他sql。这很容易理解。我的示例应该是一个使用普通函数的MWE。我应该更清楚(现在编辑)。事实上,x、y和z(还有更多)是(计算)列的复杂函数;所以我不能使用“简单解决方案”。
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  |