我有表A和表B.表A有A,B和C列,表B有A,B,C列和D 。
如果我执行以下操作:
INSERT INTO TableB
SELECT * FROM Table A
WHERE (....)
它是否允许我这样做,即使表B中有额外的列?我试图在我的项目中这样做,但是,他们告诉我,表B应该与表A具有相同的列,但是有一个额外的列。
感谢。
答案 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
将完全按照您的意愿行事。