首页 > 解决方案 > 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而是来自外部信息(文件名)。

标签: sqlitejoinaddinsert-update

解决方案


在支持 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。如果您知道如何解决这种歧义,请发表评论。


推荐阅读