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

Mysql 如何使用select语句将子集表的数据插入到超集表中?,mysql,sql,database,stored-procedures,Mysql,Sql,Database,Stored Procedures,我正在尝试进行一个动态查询,其中我希望将数据从子集表插入到超集表中 这是我的桌子 Table A |---------------------|------------------| | id | EmployeeName | |---------------------|------------------| | 1 | ABC1 | |---------------------|------

我正在尝试进行一个动态查询,其中我希望将数据从子集表插入到超集表中

这是我的桌子

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

您需要映射列,以便它们可以匹配

试试这个:

insert into B (id, EmployeeName) select id, EmployeeName from A; 
在标书中插入,员工姓名值从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 | |---------------------|------------------| 现在可以运行查询: 插入B值从A.id=C.id上的内部联接C中选择*;
这将填充表A。

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


插入到B中,从A中选择NULL,A.*

是的,但正如我所提到的,我想创建一个动态查询,其中我不需要提及列名,这样它就可以用于多个表集。是的,但正如我所提到的,我想创建一个动态查询,其中我不需要提及列名,这样它就可以用于多个表集。您使用的是MySQL还是Oracle?为什么它必须是一个存储过程?@jarih我正在使用MySQL,我试图在存储过程中实现这个逻辑。