【问题标题】:Sqlite copy data from temp table to another with conflictSqlite 将数据从临时表复制到另一个有冲突的表
【发布时间】:2021-03-27 14:36:32
【问题描述】:

我有带有主表和临时表的 db sqlite。我想从文本文件中导入数据,然后我想将临时表中的数据插入到主表中。

INSERT INTO table(key) SELECT src.key FROM temp as src
ON CONFLICT (table.key) DO UPDATE SET to_insert = 0, to_delete =0;

当我尝试运行这个查询时,sqlite 会抛出这个错误。

查询 1 错误:“DO”附近:语法错误

是否可以从另一个有冲突的表中插入数据?

【问题讨论】:

    标签: sql sqlite sql-update sql-insert


    【解决方案1】:

    select 语句需要一个where 子句:

    insert into mytable(key) 
    select key from temp where true
    on conflict (key) do update set to_insert = 0, to_delete =0;
    

    这个陷阱被记录为parsing ambiguity(强调我的):

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

    【讨论】:

    • 非常感谢。
    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2011-11-21
    相关资源
    最近更新 更多