MySQL|既存テーブルのデータを新規テーブルにINSERT INTO SELECT【SELECT INTOは非サポート!】

INSERT INTO new_table(birthday, fullname, age)
SELECT birthday, fullname, age
FROM src_table
;

既存テーブルと新規テーブルのカラム数が同じ場合は、SELECT句に*アスタリスクを指定しても大丈夫です。

重複を除いた新規テーブルを作る場合

INSERT INTO new_table(birthday, fullname, age)
SELECT *
FROM src_table
GROUP BY fullname
HAVING MAX(age)
;
  • GROUP BY fullname:fullnameの重複をまとめている。
  • HAVING MAX(age):もっとも大きいageを持つレコードに絞っている。

よくあるエラー

Table ‘new_table’ doesn’t exist

テーブル ‘new_table’は存在しません。

SELECT * INTO new_table 
FROM src_table;

SQL Serverではお馴染みのテーブル複製構文、SELECT INTOをMySQLで実行したときに出るエラー。

インサート先のテーブルが存在しないことを警告されます。(そりゃそうだ、まだ作ってないんだから)

MySQLはSELECT INTO構文をサポートしていないのです。

Unknown column ‘xxxxxx’ in ‘field list’

フィールドリストの不明な列「xxxxxx」。

SELECT句やINSERT INTO句などで指定したカラム名に間違いがあり、見当たらないことを警告するエラー。