1

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

示例表:

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. 是的 --> volume=20 (已经存在) --> new volume=20+25 (old plus new volume)
  4. 不,不是 --> volume=25
  5. 只有一个查询,因为我想在批处理和准备好的语句中将它实现到我的 Java 方法中......

我找到了 Eric B 的答案 ( click ),但我不能添加这样的东西:

UPDATE time_table SET volume=volume+25

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

4

1 回答 1

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;
于 2013-10-22T16:36:18.260 回答