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

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

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

这是我的 tables

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

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

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

这是我正在尝试的查询

insert into B (select * from A); 

它不工作并向我显示两个 table 的列数不相等。

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

据推测,您想要:

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

您需要映射列以便它们匹配。 See documentation

试试这个:

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

Insert into B(id, EmployeeName) values(select * from A); //这仅在empid上没有设置notNull约束时有效。

这是针对这种情况的最动态的查询。 我们提到了 table B 的列名,因为您只提供了 2 列的值。 如果您不想使用列名,那么您需要其他一些 table 中的剩余数据并稍微修改 table 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); 这将填充您的 table A.

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

插入 B(SELECT NULL,A.* 来自 A);