[英]insert into one table from another
如果Table_B 中的数据在Table_A 中不存在,我想将列1 的一些数据从Table_B 插入到Table_A。 例如,'Headache' 在 Table_B 的 column1 中,而不在 Table_A 的 column1 中。 谢谢。 我写了下面的 SQL,但它不起作用:
insert into Table_A(column1)
select column1
from Table_B
where column1 not in (select column1 from Table_A)
尝试这个:
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
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
没有样本数据很难确定,但我最好的猜测是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
),因为我认为意图更清晰,但如果你使用 MySQL,后者会表现得更好
或者你也可以使用:
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);
使用 MERGE 语句怎么样?
MERGE INTO TABLE_A a
USING TABLE_B b ON (a.column1=b.column1)
WHEN NOT MATCHED THEN
INSERT (column1) VALUES (b.column1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.