如何将列属于表A子集的表B数据插入到空置的表A中
插入操作实现方法
前提说明
你描述的场景是表B的所有列都是表A的列子集,表A为空需要迁移B的数据,用标准SQL即可实现,不需要额外工具。
推荐写法(通用兼容所有SQL数据库)
显式声明要插入的对应列名,这种写法稳定性最高,后续表结构变更也不容易出错,是业界公认的最佳实践:
INSERT INTO A (列1, 列2, 列3, ... 列n) SELECT 列1, 列2, 列3, ... 列n FROM B;
括号里的列就是两张表共有的全部列,顺序可以自己对应,不用和表结构顺序完全一致。
对应你给出的示例表的写法如下,示例中表B的id、name、age都是表A的已有列:
INSERT INTO A (id, name, age) SELECT id, name, age FROM B;
注意事项
- 表A中表B没有的额外列,需要满足以下两个条件之一才能正常插入:要么设置了默认值,要么允许为NULL。如果额外列是不允许为NULL且无默认值的非空约束字段,插入会报错,需要提前给这类字段设置默认值,或者在插入语句里给对应字段赋值。
- 不推荐直接写
INSERT INTO A SELECT * FROM B的简写方式,这种写法强依赖两张表公共列的顺序完全一致,一旦后续表结构调整列顺序,就会出现数据插错列的问题。 - 插入前可以先单独执行SELECT部分的语句,确认要插入的数据符合预期,避免误操作。
示例表参考
表A结构:
表B结构:
内容的提问来源于stack exchange,提问作者Mehrnaz Zadeh
相关产品推荐
相关产品推荐

