如何使用 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);
我正在尝试进行动态查询,我想将数据从子集 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);