INSERT文でデータを入れようとすると、データの取得方法によって書き方を間違えてしまうので軽くまとめてみました。大きくまとめると3パターン
全て手入力でINSERT
これは指定した要素数に合わせた数を書けば良いだけ
パターン1
INSERT INTO `テーブル名` (col1, col2, ... )
VALUES (col1, col2, ...)
SELECT結果をINSERT
ここを書く時にいつも間違えてVALUESを使おうとしてエラーを出してしまいます。
エラー
INSERT INTO `テーブル名1` (col1, col2, ...)
VALUES (SELECT col1, col2, ... FROM テーブル名2)
正しくはVALUESを使わずにINSERTします。
正解
INSERT INTO `テーブル名1` (col1, col2, ...)
SELECT col1, col2, ... FROM `テーブル名2`
SELECT結果+手入力
要素を足せば良いのでこの書き方で行けそうな気がしますがこれもエラーになります。
エラー
INSERT INTO `テーブル名1` (col1,col2)
VALUES (SELECT col1 FROM `テーブル名2`, "col2")
正しくは又してもVALUESを使わずに、該当箇所に直書きします。
正解
INSERT INTO `テーブル名1` (col1, col2)
SELECT col1, "col2に入れたいデータ" FROM `テーブル名2`
例えば、データベースに登録されていない商品をIDが重複しないように、データを追加したい場合だとこんな感じに書きます。
例
INSERT INTO `テーブル名` (id,item_name)
SELECT MAX(id)+1,"商品名" FROM `テーブル名`