2013-01-13 43 views
2

我试图向table a部分插入新行使用数据从table b加载行。我只想插入新行,其中a.id列中不存在b.id字段。如何用条件将数据从一个表插入另一个表

这里是我的表:

table_a  table_b 
---------  ----------- 
id    id 
first_name  first_name 
country  middle_name 
last_name  last_name 

这里是我的代码:

INSERT INTO table_a a 
SELECT b.id, b.first_name,b. last_name 
FROM table_b b WHERE b.id <> a.id 

问题:我怎样才能做到这一点使用插入select语句?请注意,我已将中间名称放在一张桌子上,并将国家放在另一张桌子上,以使其与当前情况更相似。有没有办法“映射”字段?或者我必须确保我的insert select语句具有与目标表插入的值完全相同的值数量?或者它只是寻找匹配的列名称,只更新那些匹配的列?

+0

使用'不EXISTS'。 – Kermit

+0

我已经对问题进行了更新以完全解决我的问题 - 我可以将字段设置为彼此相等,还是必须包含具有空值的引号的确切数量的值? '','',..' – Ben

回答

3

我只想插入新行其中场b.id在不存在 a.id专栏。

替代解决方案将使用LEFT JOINIS NULL

INSERT INTO table_a 
SELECT b.* 
FROM table_b b 
     LEFT JOIN table_a a 
      ON a.ID = b.ID 
WHERE a.ID IS NULL 
1

你可以做以下时,检查一下表-A存在ID

INSERT INTO table_a (id, first_name, last_name) 
SELECT b.id, b.first_name,b.last_name 
FROM table_b b 
WHERE not exists (SELECT 1 FROM table_a a WHERE b.id = a.id) 

您的国家列将是空的所有行。如果你想存储的静态值,那么查询应该是

INSERT INTO table_a (id, first_name, country, last_name) 
SELECT b.id, b.first_name, 'USA', b.last_name 
FROM table_b b 
WHERE not exists (SELECT 1 FROM table_a a WHERE b.id = a.id) 
+0

我已经对问题进行了更新以精确地解决我的问题 - 可以将字段设置为彼此相等,还是必须包含具有引号的确切数量的值为空白值? '..,'',..' – Ben

+0

@BenJones,检查更新的答案 –

-1

试试这个

INSERT INTO table_a a (id , first_name , last_name) Values (
       SELECT b.id, b.first_name,b.last_name 
       FROM table_b b WHERE a.id not in (select id from table_b)) 
+0

我已经对问题进行了更新以完全解决我的问题 - 我可以将字段设置为彼此相等,还是必须包含具有空白值的引用值的确切数量? '..,'',..' – Ben

+0

不更新它的字段将自动为空或像国家一样空 –

相关问题