0

这段代码有什么问题:

INSERT INTO main.table_1 
   (SELECT * 
    FROM TempDatabase.table_1 
    WHERE TempDatabase.table_1.ID != "5855CA0F8E23")

我对 ID 设置了条件以防止重复(也因为我在 main.table_1 上应用了约束)。然而,当我在 SQLiteManager 中运行时,我得到一个语法错误“near SELECT”。

如果我删除了括号,由于违反了 main.table_1 上的约束,我仍然会遇到另一个错误(就像完全忽略 WHERE 条件一样!)

我在这里做错了什么!

4

2 回答 2

3

正确的语法是您的第二次尝试,不带括号。(括号用于定义您将插入的列名。)

您遇到了约束违规,因为不管您怎么想,将临时数据插入主数据库实际上违反了对主数据库表的某些约束,即使您排除了具有 id 的一条记录5855CA0F8E23。检查你的约束。

于 2012-08-03T04:21:10.463 回答
2

您需要使用IGNOREREPLACE(http://www.sqlite.org/lang_insert.html)

如果发生约束冲突,则将跳过行,并将继续:

INSERT OR IGNORE INTO main.table_1 SELECT * from TempDatabase.table_1

如果发生约束冲突,记录 inmain.table_1将被删除并插入整行 from TempDatabase.table_1

INSERT OR REPLACE INTO main.table_1 SELECT * from TempDatabase.table_1

没有“合并行”的方法 - 即将两个选项卡中的数据聚合到新行中。

于 2012-08-03T04:22:06.457 回答