sqlite - SQLite:基于共享指标添加整数表
问题描述
我将来自不同 sqlite 数据库的数字聚合到一个输出数据库表中。
我需要根据告诉我要更新哪些行的i1,i2,i3
三个指示列在输出表中添加整数列:a,b,c
ATTACH DATABASE "out.db" AS output;
INSERT INTO output.rows(a,b,c,i1,i2,i3)
SELECT DISTINCT "some_value", b, c, 0, 0, 0 FROM main.rows
ON CONFLICT IGNORE;
#THE FOLLOWING LINES MIGHT SHOW WHAT I MEAN...
UPDATE output.rows SET i1=i1+i1_,i2=i2+i2_, i3=i3+i3_
WHERE a="some_value" AND b=b_ and c=c_
SELECT i1_, i2_, i3_, b_, c_ FROM main.rows;
我不想输入a,b,c
. 如您所见,a
不是来自外部信息,main
而是来自外部信息(文件名)。
解决方案
在支持 UPSERT 的较新版本的 SQLite 中,以下似乎有效:
ATTACH DATABASE "$out.db" AS output;
INSERT INTO output.rows(a,b,c,i1,i2,i3)
SELECT "some_value", b, c, i1, i2, i3 FROM main.rows WHERE true
ON CONFLICT (a,b,c) DO UPDATE SET i1=i1+i1, i2=i2+i2, i3=i3+i3;
在我的例子中,i1,i2,i3
来自的列main
实际上I1,I2,I3
与它们在 中的对应物具有不同的名称(例如)output
,因此UPDATE
更清晰(i1=i1+I1
)。main.rows.i1
我没有在声明中引用 as UPDATE
。如果您知道如何解决这种歧义,请发表评论。
推荐阅读
- mysql - 是否可以将应用程序内的所有数据库交互限制为读取?
- python - 使用 BCP 将 CSV 文件导入 SQL Server 表时如何格式化日期字段?
- ios - iOS13 崩溃-[UIWindowScene _enumerateWindowsIncludingInternalWindows:onlyVisibleWindows:asCopy:stopped:withBlock:]?
- javascript - 如何返回存储在 cookie 中的 URL
- css - 使用 Bash 脚本查找和替换 css 文件中的文件名
- java - 使用流而不是嵌套的 for 循环
- android - 我怎样才能使 ProgressBar 角直而不圆?
- html - 使用 Thymeleaf 和 Spring boot 从下拉列表中提取所选值
- python - 如何比较不在另一个二维列表中的二维列表?
- pandas - 熊猫掩码数据框分配二维数组