2012-08-03 95 views
0

什么问题在此代码:SQL - 从一个表中插入行到另一个当条件满足

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

我的ID做了一个条件,以防止重复(也因为我申请的主要一个约束。表格1)。但是,当我在SQLiteManager中运行时,出现语法错误“near SELECT”。

如果我删除了括号,还是我得到了另一个错误是由于违反限制在main.table_1(因为如果WHERE条件被完全忽略!)

我在做什么错在这里!

回答

3

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

由于您认为将临时数据插入主数据库实际上违反了主数据库的某些约束表,即使您排除具有编号为5855CA0F8E23的一条记录。检查你的约束。

+0

你绝对正确:)谢谢。 – 2012-08-03 04:27:48

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 

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

+0

是的,这将解决这个问题。 bfares的答案也是正确的,我使用你的语法解决了这个问题。所以我查了他的答案为“答案”,你的答案有+1 :) – 2012-08-03 04:29:02

相关问题