sqlite - 可以逐行处理sqlite UPDATE语句以帮助解决“基于列的sqlite计算列”
问题描述
我有一个表,其中包含基于其他计算列的大量计算列。所以有:
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
so 而不是:
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 |
推荐阅读
- reactjs - 在 axios/ajax 调用中处理 Symfony 路由
- c - 错误预期)同时将结构的指针成员传递给函数
- javascript - 使用 Javascript 查找超级数字,CMD 中出现 NaN 错误
- python - 如何在不通过表单验证的情况下在 UpdateView 中进行验证?
- android - android studio 3.3 中的“包括 C++ 支持”选项在哪里?
- php - 如何修复模型之间的关系错误?
- laravel - Laravel:在单个视图中返回 2 个集合
- wordpress - 尾随斜杠与非尾随导致重复页面的问题
- javascript - 使用私有 IP 从 Google Functions 连接到 Cloud SQL
- regex - 设计:在不断创建和删除表时运行 pg_dump