2016-09-29 76 views
1

如果Table_B中的数据不存在于Table_A中,我想从Table_B向Table_A插入column1的一些数据。例如,“头痛”位于Table_B的第1列中,但不在表A的第1列中。谢谢。我写了下面的SQL语句,但没有奏效:从另一个表插入到一个表中

insert into Table_A(column1) 
select column1 
from Table_B 
where column1 not in (select column1 from Table_A) 
+0

你的意思是“没有工作”*是什么意思?你能详细说明吗?你有错误吗?另外,你使用的是什么DBMS? – GarethD

回答

1

试试这个:

INSERT INTO Table_A(column1) 
SELECT B.column1 
FROM Table_B B 
LEFT JOIN Table_A A ON B.column1 = A.column1 
WHERE A.column1 IS NULL 
0
Insert into Table_A(column1) 
select column1 from Table_B 
left join Table_A on Table_B.column1 = Table_A.column1 
where A.column1 is null 
0

有了它很难说肯定没有样本数据,但我最好的猜测是您在table_A.Column1中有NULL的值。如果你确实有一个空值,查询将相当于是这样的:

SELECT Column1 
FROM Table_B 
WHERE Column1 NOT IN (1, 2, 3, NULL); 

这是相当于:

SELECT Column1 
FROM Table_B 
WHERE Column1 <> 1 
AND  Column1 <> 2 
AND  Column1 <> 3 
AND  Column1 <> NULL; 

由于Column1 <> NULL是不正确的,查询不返回任何结果。最语法类似的方式来达到预期的效果,你可能有NULL列使用NOT EXISTS

INSERT INTO Table_A(column1) 
SELECT Column1 
FROM Table_B AS B 
WHERE NOT EXISTS (SELECT 1 FROM Table_A AS A WHERE A.Column1 = B.Column1); 

但是,你可以用另外一种方法是:

INSERT INTO Table_A(column1) 
SELECT Column1 
FROM Table_B AS B 
     LEFT JOIN Table_A AS A 
      ON A.Column1 = B.Column1 
WHERE A.Column1 IS NULL; 

在这个由左加入到table_A然后指出A.Column1必须是NULL,那么您将删除Table_A中已有的任何记录。

我更喜欢前者(NOT EXISTS),因为我觉得意图更加清晰,但如果你use MySQL the latter will perform better

或者你也可以使用:关于使用MERGE语句

INSERT INTO Table_A(column1) 
SELECT Column1 
FROM Table_B AS B 
WHERE B.Column1 IS NOT NULL 
AND  B.COlumn1 NOT IN (SELECT A.Column1 FROM Table_A AS A WHERE A.Column1 IS NOT NULL); 
0

什么?

MERGE INTO TABLE_A a 
USING TABLE_B b ON (a.column1=b.column1) 
WHEN NOT MATCHED THEN 
    INSERT (column1) VALUES (b.column1); 
相关问题