2017-08-17 4 views
0

Insert into from other mysql tableクエリで自動インクリメントカラムがID番号を増やさないのはなぜですか?ここに私のクエリです:常にすなわち、同じ番号を返しAtutoインクリメントカラムでは、mysqlテーブルのId数値がインクリメントされません

insert into tbl_1 (pk, col_a, col_b, col_c) 
select null,col_a, col_b, col_c from tbl_2 

pktbl_1に「1」、「1」、「1」.....誰もが、私は自動インクリメントのために選択するべき値が何であるかを教えてもらえます'1'、 '2'、 '3'、....などを返すようにします。 tbl_2に多数のレコードがあり、pkの列がありません。それは簡単な質問かもしれないが、私はそれを解決することができません。

+0

あなたのテーブルのddlは何ですか? – Pirate

+0

'表tbl_1( \t' pk' BIGINT(100)NOT NULL AUTO_INCREMENT、 \t 'col_a' VARCHAR(50)NOT NULL DEFAULT ''、 \t' col_b' VARCHAR(30)NOT NULL DEFAULT ''、 をCREATE \t 'col_c' VARCHAR(30)NOT NULL DEFAULT '' \tプライマリキー(' pk'、 'col_a'、' col_b' ); ' – mitedu

答えて

1

変更あなたの挿入クエリ、

insert into tbl_1 (pk, col_a, col_b, col_c) 
select null,col_a, col_b, col_c from tbl_2 

insert into tbl_1 (col_a, col_b, col_c) 
select col_a, col_b, col_c from tbl_2 

にあなたが挿入しながら 自動インクリメント列を指定する必要はありません。

バルク挿入の場合自動インクリメントは機能しません。そのためにdiffメソッドを使用する必要があります。このクエリを試してみると、

insert into tbl_1 (pk, col_a, col_b, col_c) 
select @curRank := @curRank + 1 AS rank,col_a, col_b, col_c from tbl_2, (SELECT @curRank := 0) rn order by col_a 

希望すると助かります。

+0

いいえ、これはうまくいきません。列のような列の数が行1の値の数と一致しない – mitedu

+0

挿入中にnullを使用しないnullの値に余分な値を指定しているためにエラーが発生する – Pirate

+0

select文でnullを使用しないと、 'pk'カラムの '1'、 '1'、 '1'、 '1' .....私は私の質問で説明した。 – mitedu

0

挿入クエリで自動インクリメント列を指定する必要はありません。

insert into tbl_1 (col_a, col_b, col_c) select col_a, col_b, col_c from tbl_2

+0

ありがとうございますが、今は正常に動作します。 – mitedu

関連する問題