我遇到了一个问题,即将数据从一个表插入到另一个表中,具有相同的表结构,但具有不同的列位置。
示例:
表1:
emp1:
Name char 50
Age int
Salary Float
表2:
emp2:
Name char 50
Salary Float
Age int
我的代码:
insert into emp1
select * from emp2
我无法插入,因为列顺序从一个表到另一个表不同,但是,这两个表具有相同的名称和数据类型。
答案 0 :(得分:3)
你可以(或者@tring_s提到应该)指定列。
这样做你可以改变这些表的结构(可能发生,对吧?)而没有任何后果(除非你删除这些列)。你的代码仍然有效。
此外,指定列名称对任何人来说都更具可读性。您无需调用sp_help
或任何其他命令来检查结构(表模式)。
BTW在两个表或任何表中都有主键,如果不指定所搜索的列,则会抛出异常:
如果INSERT语句违反约束或规则,或者它的值与列的数据类型不兼容,则语句将失败并返回错误消息。
如果INSERT使用SELECT或EXECUTE加载多行,则从加载的值中发生的任何规则或约束的违反都会导致语句停止,并且不会加载任何行。
INSERT INTO emp1 (Name
,Age
,Salary )
SELECT Name
,Age
,Salary
FROM emp2
答案 1 :(得分:0)
答案 2 :(得分:0)
很简单,只需在插入过程中对列进行重新排序:
INSERT INTO `emp1` (Name, Salary, Age)
SELECT Name, Salary, Age FROM `emp2`;