2013-10-22 122 views
1

我正在写一个模拟应用程序和魔杖,以便将值添加到表中,如果它们存在或只是将它们插入为新值。SQLite更新或插入,而不是Upsert

示例表:

CREATE TABLE "time_table" ("time_abs" INTEGER UNIQUE , "volume" DOUBLE); 
INSERT INTO "time_table" ("time_abs","volume") VALUES (5,20); 

这是我想做的事:

  1. 插入:time_abs=5 volume=25
  2. 之前,我做它应该只检查是否已经有在time_abs值= 5
  3. yes是 - > volume = 20(已经存在) - > new volume = 20 + 25(old plus new volume)
  4. 没有它不是 - >体积= 25
  5. 一个查询只,我想落实到批次和事先准备好的声明中我的Java方法...

我发现埃里克B的答案(click ),但我不能添加这样的东西:

UPDATE time_table SET volume=volume+25 

谢谢你的关注,祝你有美好的一天。

回答

1

如果记录已经存在,第一个SELECT计算新值。 如果记录不存在,则返回结果。

如果记录不存在,第二个SELECT将返回要使用的值。

将两个SELECT与UNION ALL组合使用,可以为我们提供一条或两条记录。 使用LIMIT 1,只返回第一个。

这一条记录就可以被插入到INSERT语句:

INSERT OR REPLACE INTO time_table(time_abs, volume) 
SELECT time_abs, volume + 25 FROM time_table WHERE time_abs = 5 
UNION ALL 
SELECT 5, 25 
LIMIT 1; 
相关问题