此代码有什么问题:
INSERT INTO main.table_1
(SELECT *
FROM TempDatabase.table_1
WHERE TempDatabase.table_1.ID != "5855CA0F8E23")
我在ID上做了一个条件以防止重复(并且还因为我在main.table_1上应用了约束)。但是,当我在SQLiteManager中运行时,语法错误“接近SELECT”。
如果我删除括号,仍然会因为违反main.table_1上的约束而出现另一个错误(如果完全忽略WHERE条件!)
我在这里做错了什么!
答案 0 :(得分:3)
正确的语法是第二次尝试,没有括号。 (括号用于定义要插入的列名。)
您正在获得约束违规,因为尽管您认为,将临时数据插入主数据库实际上违反了主数据库表上的某些约束,即使您排除了一个标识为{{1}的记录}。检查你的约束。
答案 1 :(得分:2)
您需要使用IGNORE
或REPLACE
(http://www.sqlite.org/lang_insert.html)
如果发生约束违规,将跳过行,并且它将继续:
INSERT OR IGNORE INTO main.table_1 SELECT * from TempDatabase.table_1
如果发生约束违规,将删除main.table_1
中的记录,并插入TempDatabase.table_1
的完整行:
INSERT OR REPLACE INTO main.table_1 SELECT * from TempDatabase.table_1
没有“合并行”的方法 - 即将两个标签中的数据聚合到新行中。