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,我试图在存储过程中实现这个逻辑。