2011-09-16 17 views
2

ここに私のコードスニペットがあります。 なぜ挿入文(第3のスニペット)が機能しないのですか?なぜこのinsert文はmysqlでは動作しませんか?

/* work nicely*/ 
    create table t1 
    (
     a int, 
     b varchar(255) 
    ); 

/* work nicely*/ 
insert into t1 values (1,"one"),(2,"two"); 

/* Why does this one not work??? */ 
insert into t1 
values select * from t1; 

答えて

5

一般に、SELECTクエリの結果をINSERTクエリの値として使用する場合は、VALUESキーワードを削除します。 This is true in MySQL as well:それはソースとターゲット表が同じであることに数、順序、および列の種類に大きく依存しているので、

INSERT INTO t1 
SELECT * FROM t1; 

上記のバージョンは「おそらくあなたが勝ったほとんどの実際の例では(ただし、壊れやすいですと同じテーブルから取った値を挿入してください。

ベストプラクティスとしてINSERT..SELECTを使用したとき、私は列を明示的に指定をお勧めします:

INSERT INTO t1(col1, col2, col3) 
SELECT colA, colB, colC FROM t2 
関連する問題