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