Ral*_*ann 1 sqlite upsert on-clause sql-update sql-insert
我想将 JSON 数组中的所有元素插入到表中:
INSERT INTO local_config(parameter, value)
SELECT json_extract(j.value, '$.parameter'), json_extract(j.value, '$.value')
FROM json_each(json('[{"parameter": 1, "value": "value1"}, {"parameter": 2, "value": "value2"}]')) AS j
WHERE value LIKE '%'
ON CONFLICT (parameter) DO UPDATE SET value = excluded.value;
Run Code Online (Sandbox Code Playgroud)
到目前为止这有效,但我真的需要这个WHERE value LIKE '%'条款吗?
当我删除它时:
INSERT INTO local_config(parameter, value)
SELECT json_extract(j.value, '$.parameter'), json_extract(j.value, '$.value')
FROM json_each(json('[{"parameter": 1, "value": "value1"}, {"parameter": 2, "value": "value2"}]')) AS j
ON CONFLICT (parameter) DO UPDATE SET value = excluded.value;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
[SQLITE_ERROR] SQL error or missing database (near "DO": syntax error)
Run Code Online (Sandbox Code Playgroud)
当附加 UPSERT 的 INSERT 语句从 SELECT 语句获取其值时,存在潜在的解析歧义。解析器可能无法判断“ON”关键字是否引入了 UPSERT 或者它是否是联接的 ON 子句。要解决此问题,SELECT 语句应始终包含 WHERE 子句,即使该 WHERE 子句只是“WHERE true”。
因此,您需要 WHERE 子句,但它可以是简单的WHERE true或只是WHERE 1.