2015-12-14 66 views

回答

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列,但SELECT * FROM Table A將只生成3列,而不是4。這是你得到錯誤的原因。

+0

所以我不能這樣做呢? INSERT INTO TableB(A,B,C)SELECT * FROM表A – CJunior

+0

在表A和B中的列順序相同的情況下,您可以使用您提到的查詢,因爲在這種情況下,關鍵功能是插入應該隻影響三列。但是我建議你總是使用明確的色譜柱規格,因爲它可以保護你免受某些不希望的結果的影響(例如,如果表A和B中的某些色譜柱將被交換,例如A中的A,B,C和B中的A,C,B - 在這種情況下,'insert ... select * ...'會產生一些意想不到的結果)。 –

0

您應該指定將Table A中的值插入表B的哪些列。例如:

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 

將完全符合您的要求。

相關問題