UPSERT 用于 INSERT INTO tab SELECT * FROM another_tab"

本教程将介绍UPSERT 用于“INSERT INTO tab SELECT * FROM another_tab"的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

UPSERT 用于 INSERT INTO tab SELECT * FROM another_tab" 教程 第1张

问题描述

我会怎么做UPSERT"?(INSERT OR UPDATE) 插入到 SQLite 表中时.

我试过了:

INSERT INTO tab_name
SELECT * FROM tmp
ON CONFLICT(id)
 DO UPDATE SET
val = excluded.val;

但它给了我:

DO"附近的语法错误

实现这一目标的正确和最有效的方法是什么?

推荐答案

您可能遇到了一个名为 的记录陷阱解析歧义 :

UPSERT 附加到的 INSERT 语句从 SELECT 语句中获取其值时,可能存在解析歧义.解析器可能无法判断 "ON" 关键字是否引入了 UPSERT 或者它是否是连接的 ON 子句.要解决此问题,SELECT 语句应始终包含 WHERE 子句,即使该 WHERE 子句只是 "WHERE true".)

那么,这样效果更好吗?

INSERT INTO tab_name
SELECT * FROM tmp WHERE true
ON CONFLICT(id) DO UPDATE SET val = excluded.val;

好了关于UPSERT 用于“INSERT INTO tab SELECT * FROM another_tab"的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。