我正在将来自不同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
语句中引用为UPDATE
。如果您知道如何解决这种歧义,请发表评论。