![](/img/trans.png)
[英]ON CONFLICT IGNORE - How to insert data into a dupes table if there is a conflict instead of ignoring
[英]INSERT INTO with subquery and ON CONFLICT
我想将 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;
到目前为止这是可行的,但我真的需要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;
我收到此错误:
[SQLITE_ERROR] SQL error or missing database (near "DO": syntax error)
当 UPSERT 附加到的 INSERT 语句从 SELECT 语句中获取其值时,存在潜在的解析歧义。 解析器可能无法判断“ON”关键字是否引入了 UPSERT 或者它是否是连接的 ON 子句。 要解决此问题,SELECT 语句应始终包含一个 WHERE 子句,即使该 WHERE 子句只是“WHERE true”。
所以你需要 WHERE 子句,但它可以是一个简单的WHERE true
或只是WHERE 1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.