SQLite: добавление целочисленных таблиц на основе общих индикаторов - PullRequest
0 голосов
/ 26 марта 2020

Я собираю числа из разных баз данных 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, а от внешней информации (имя файла).

1 Ответ

0 голосов
/ 28 марта 2020

В более новых версиях SQLite, которые поддерживают UPSERT, кажется, что работает следующее:

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. Если вы знаете, как решить эту двусмысленность, пожалуйста, прокомментируйте.

...