SQLite更新或插入,而不是Upsert

时间:2013-10-22 15:59:29

标签: java sql database sqlite

我正在编写一个模拟应用程序和魔杖,如果它们存在,则将值添加到表中,或者只是将它们作为新值插入。

示例表:

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. 是否已有值
  4. 是的 - >体积= 20(已经存在) - >新卷= 20 + 25(旧加新卷)
  5. 不,不是 - >体积= 25
  6. 只有一个查询,因为我想在批量和准备好的声明中将它实现到我的Java方法中......
  7. 我找到了Eric B的回答(click),但是我不能添加这样的东西:

    UPDATE time_table SET volume=volume+25
    

    感谢您的关注,祝您度过愉快的一天。

1 个答案:

答案 0 :(得分: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;