1

我想要

  • 如果它不存在,则在我的表中插入一个新行
  • 如果 key 已经存在,则更新条目,但前提是字段时间戳日期比存储的字段更新。我用 sqlite 试过这个,但它在 where 附近给了我一个错误。我也不确定这是否正确以及如何正确执行。

代码:

String sql = "INSERT OR REPLACE INTO "+TABLE_USER+" (...)" +
     " VALUES ('"..."'" + 
     ") WHERE " + timestamp + 
         " > (select " + COLUMN_TIMESTAMP + 
         " from " + TABLE_USER + " where " + COL_NUMBER + " = '" nr + "')" 
4

2 回答 2

1

插入或替换不允许使用 where 子句。我想你必须分两步完成。

于 2012-12-28T15:30:05.450 回答
0

仅当 updated_at 字段较新时才更新的示例。

-- https://www.db-fiddle.com/f/7jyj4n76MZHLLk2yszB6XD/22
 
DROP TABLE IF EXISTS db;

CREATE TABLE db
(
 id PRIMARY KEY,
 updated_at,
 other
);

INSERT INTO db (id,updated_at,other) VALUES(1,1,1);

SELECT * FROM db;

INSERT INTO db (id,updated_at,other) VALUES(1,2,2)
ON CONFLICT(id) DO UPDATE SET updated_at=excluded.updated_at;

SELECT * FROM db;

-- WHERE is FALSE
INSERT INTO db (id,updated_at,other) VALUES(1,2,3)
ON CONFLICT(id) DO UPDATE SET updated_at=excluded.updated_at, other=excluded.other
WHERE excluded.updated_at > updated_at;

SELECT * FROM db;

-- ok to SET a PRIMARY KEY. WHERE is TRUE
INSERT INTO db (id,updated_at,other) VALUES(1,3,4)
ON CONFLICT(id) DO UPDATE SET id=excluded.id, updated_at=excluded.updated_at, other=excluded.other
WHERE excluded.updated_at > updated_at;

SELECT * FROM db;
于 2021-04-11T11:12:17.443 回答