插入表B选择*来自表A,但表B中有一个额外的列,是否可能?

时间:2015-12-14 14:49:43

标签: mysql sql-server

我有表A和表B.表A有A,B和C列,表B有A,B,C列和D

如果我执行以下操作:

INSERT INTO TableB
SELECT * FROM Table A
WHERE (....)

它是否允许我这样做,即使表B中有额外的列?我试图在我的项目中这样做,但是,他们告诉我,表B应该与表A具有相同的列,但是有一个额外的列。

感谢。

2 个答案:

答案 0 :(得分:4)

如果两个表中的列不相同,则必须在insert和select语句中显式指定列。

所以在你的特定情况下它应该是

INSERT INTO TableB (A, B, C)
SELECT A, B, C FROM Table A
WHERE (....)

否则,如果你没有在insert语句中指定列,那么在大多数DBMS中应该从表定义中获取列,并且在你的情况下它看起来像INSERT INTO TableB (A, B, C, D) - 并假设有4列,但是<{1}}只会产生3列而不是4列。这就是你得到错误的原因。

答案 1 :(得分:0)

您应该指定表B中的哪些列将插入表A中的值。例如:

CREATE TABLE foo (col1 INT, col2 INT);
INSERT INTO foo
VALUES (1,2);

CREATE TABLE bar (col1 INT,col2 INT, col3 INT);
INSERT INTO bar (col1,col2)
SELECT * FROM foo

将完全按照您的意愿行事。