繁体   English   中英

如何使用 select 语句将子集表的数据插入超集表?

[英]How to insert the data of a subset table into a superset table using select statement?

我正在尝试进行动态查询,我想将数据从子集表插入到超集表中。

这是我的桌子

Table A
|---------------------|------------------|
|          id         |  EmployeeName    |
|---------------------|------------------|
|           1         |       ABC1       |
|---------------------|------------------|
|           2         |       ABC2       |
|---------------------|------------------|
|           3         |       ABC3       |
|---------------------|------------------|

Table B
|----------------------|---------------------|------------------|
|          id          |       empid         |  EmployeeName    |    
|----------------------|---------------------|------------------|
|                      |                     |                  |
|----------------------|---------------------|------------------|
|                      |                     |                  |
|----------------------|---------------------|------------------|
|                      |                     |                  |
|----------------------|---------------------|------------------|

我想将表A的数据插入表B

这是我正在尝试的查询

insert into B (select * from A); 

它不起作用并向我显示两个表的列数不相等。

默认情况下, insert语句期望提供所有目标列。 您可以通过枚举要插入的列来更改它。这是您应该坚持的好习惯,因为它使查询更易于阅读和维护。

大概,你想要:

insert into b(id, employeeName)
select id, employeeName
from a

您需要 map 列,以便它们可以匹配。 查看文档

试试这个:

insert into B (id, EmployeeName) select id, EmployeeName from A; 

Insert into B(id, EmployeeName) values(select * from A); //这仅适用于未在 empid 上设置 notNull 约束。

对于这种情况,这是您可以拥有的最动态的查询。 我们提到了表 B 的列名,因为您只提供了 2 列的值。 如果您不想使用列名,那么您需要在其他表中保留剩余数据并稍微修改表 B。

 Table A
|---------------------|------------------|
|          id         |  EmployeeName    |
|---------------------|------------------|
|           1         |       ABC1       |
|---------------------|------------------|
|           2         |       ABC2       |
|---------------------|------------------|
|           3         |       ABC3       |
|---------------------|------------------|

Table B
|----------------------|---------------------|------------------|
|          id          |       EmployeeName  |      empid       |    
|----------------------|---------------------|------------------|
|                      |                     |                  |
|----------------------|---------------------|------------------|
|                      |                     |                  |
|----------------------|---------------------|------------------|
|                      |                     |                  |
|----------------------|---------------------|------------------|
Table C
|---------------------|------------------|
|          id         |       empid      |
|---------------------|------------------|
|           1         |       1000       |
|---------------------|------------------|
|           2         |       1001       |
|---------------------|------------------|
|           3         |       1002       |
|---------------------|------------------|

现在您可以运行查询: insert into B values(select * from A inner join C on A.id=C.id); 这将填充您的表 A。

这是对我有用的最终解决方案,因为 Id 是一个自动增量列,如果您在其中输入 null ,则没有任何变化。

插入 B(从 A 中选择 NULL,A.*);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM