代码之家  ›  专栏  ›  技术社区  ›  Temp Account

与表中的SELECT冲突会导致第11行附近的解析错误:靠近“DO”

  •  0
  • Temp Account  · 技术社区  · 6 月前

    我有以下几点:

    INSERT INTO names (first, last) 
      SELECT first, last FROM tmp  
      ON CONFLICT(first) DO UPDATE SET seen=seen + 1; 
    

    我收到一个错误: Parse error near line 11: near "DO": syntax error

    但是,如果我直接手动插入值,它会起作用:

    INSERT INTO names (first, last) 
      VALUES ('Bob', 'Smith')  
      ON CONFLICT(first) DO UPDATE SET seen=seen + 1; 
    
    

    为什么我不能从select语句中追加销售记录?

    1 回复  |  直到 6 月前
        1
  •  1
  •   Tim Roberts    6 月前

    文档在这里讨论了这一点:

    https://www.sqlite.org/lang_upsert.html

    当您将INSERT与SELECT一起使用时,可能会出现解析歧义。解析器可能无法判断“ON”关键字是否引入了冲突子句,或者它是否是联接的ON子句。为了解决这个问题,SELECT语句应该始终包含一个WHERE子句,即使该WHERE子句只是“WHERE true”。