SQL - 满足条件时,将行从一个表插入另一个表

时间:2012-08-03 04:13:50

标签: sql database sqlite insert

此代码有什么问题:

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条件!)

我在这里做错了什么!

2 个答案:

答案 0 :(得分:3)

正确的语法是第二次尝试,没有括号。 (括号用于定义要插入的列名。)

您正在获得约束违规,因为尽管您认为,将临时数据插入主数据库实际上违反了主数据库表上的某些约束,即使您排除了一个标识为{{1}的记录}。检查你的约束。

答案 1 :(得分:2)

您需要使用IGNOREREPLACE(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

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