2015-07-15 2 views
0

Я хотел бы обновить данные до таблицы в SQLite, но обновляемый столбец (если запись найдена) должна быть общей. Я использую параметризованный запрос, и у меня возникают проблемы с синтаксисом.Upsert в SQLite с текущим итогом, если запись найдена

Мое понимание до сих пор является то, что COALESCE является способ сделать upsert в SQLite, так что это скелет, что у меня до сих пор:

INSERT OR REPLACE INTO TABLE (ID, Quantity) 
VALUES (:ID, COALESCE(Quantity + :Quantity_change, :Quantity_change) 

Другими словами, если запись найдите, добавьте изменение количества в текущее количество, иначе вставьте запись с изменением количества в качестве количества.

В сервере SQL он прекрасно работает с запросом слияния:

MERGE ...... 
..... 
WHEN MATCHED THEN UPDATE SET Quantity = Quantity + :Quantity_change 
WHEN NOT MATCHED THEN INSERT (..Quantity), VALUES (.. :Quantity_change); 

ответ

0

ОК так что это работает для меня:

INSERT OR REPLACE INTO TABLE (ID, Quantity) 
VALUES (:ID, 
     COALESCE(
      (SELECT Quantity FROM TABLE WHERE ID = :ID) + :Quantity_change, :Quantity_change)); 

Благодаря this SO ссылку за помощь.

Смежные вопросы