【问题标题】:How to insert data from one table to another with conditions如何使用条件将数据从一个表插入到另一个表
【发布时间】:2012-12-27 20:10:33
【问题描述】:

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

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

【问题讨论】:

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

标签: mysql sql insert


【解决方案1】:

我只想在 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

【讨论】:

    【解决方案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)
    

    【讨论】:

    • 我已经对问题进行了更新,以准确解决我的问题 - 我可以将字段设置为彼此相等,还是必须在空白值的引号中包含确切数量的值? ..,'',..
    【解决方案3】:

    试试这个

       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) )
    

    【讨论】:

    • 我已经对问题进行了更新,以准确解决我的问题 - 我可以将字段设置为彼此相等,还是必须在空白值的引号中包含确切数量的值? ..,'',..
    • 你不更新的字段会像国家一样自动为空或为空
    猜你喜欢
    • 2014-10-15
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多