我正在尝试将新行插入table a
,部分使用table b
中的数据加载行。我只想在b.id
列中不存在字段a.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
问题:如何使用insert select语句执行此操作?请注意,我在一个表中包含中间名,在另一个表中包含Country,以使其更符合我目前的情况。有没有办法“映射”这些字段?或者我必须确保我的insert select语句具有与目标表插入的值完全相同的值吗?或者它只是寻找匹配的列名称,只更新那些匹配的列?
答案 0 :(得分:3)
我只想在a.id列中插入新行,其中字段b.id不存在。
另一种解决方案是使用LEFT JOIN
和IS 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 :(得分:2)
您可以执行以下操作,检查table_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)
对于所有行,您的country列将为null。如果要存储静态值,则查询应为
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)
答案 2 :(得分:-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) )