如何将条件从一个表插入到另一个表中

时间:2013-01-13 22:05:44

标签: mysql sql insert

我正在尝试将新行插入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语句具有与目标表插入的值完全相同的值吗?或者它只是寻找匹配的列名称,只更新那些匹配的列?

3 个答案:

答案 0 :(得分:3)

  

我只想在a.id列中插入新行,其中字段b.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 :(得分: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) )