我有表A和表B.表A有列A,B和C,表B有列A,B,C 和D。插入表B選擇*從表A中,但在表B中有一個額外的列,可以嗎?
如果我做到以下幾點:
INSERT INTO TableB
SELECT * FROM Table A
WHERE (....)
不會允許我這樣做,即使該表B有額外的列?我試圖在我的項目中這樣做,但是,他們告訴我,表B應該與表A有相同的列,但有一個額外的列。
謝謝。
我有表A和表B.表A有列A,B和C,表B有列A,B,C 和D。插入表B選擇*從表A中,但在表B中有一個額外的列,可以嗎?
如果我做到以下幾點:
INSERT INTO TableB
SELECT * FROM Table A
WHERE (....)
不會允許我這樣做,即使該表B有額外的列?我試圖在我的項目中這樣做,但是,他們告訴我,表B應該與表A有相同的列,但有一個額外的列。
謝謝。
在兩個表中的列不相同的情況下,您必須在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。這是你得到錯誤的原因。
您應該指定將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
將完全符合您的要求。
所以我不能這樣做呢? INSERT INTO TableB(A,B,C)SELECT * FROM表A – CJunior
在表A和B中的列順序相同的情況下,您可以使用您提到的查詢,因爲在這種情況下,關鍵功能是插入應該隻影響三列。但是我建議你總是使用明確的色譜柱規格,因爲它可以保護你免受某些不希望的結果的影響(例如,如果表A和B中的某些色譜柱將被交換,例如A中的A,B,C和B中的A,C,B - 在這種情況下,'insert ... select * ...'會產生一些意想不到的結果)。 –