2

我正在尝试将新行插入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

问题:如何使用插入选择语句来做到这一点?请注意,我在一张表中包含中间名,在另一张表中包含国家/地区,以使其与我目前的情况更具可比性。有没有办法“映射”这些字段?或者我必须确保我的插入选择语句具有与目标表完全相同数量的要插入的值?还是它只会查找匹配的列名并只更新那些匹配的列?

4

3 回答 3

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
于 2013-01-14T04:40:00.570 回答
2

您可以执行以下操作,检查 id 是否存在于 table_a

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)
于 2013-01-13T22:09:25.993 回答
-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) )
于 2013-01-13T22:15:54.913 回答