■ 問題の現象
* MySQL で問題なかったSQL文「INSERT SELECT文」が、Amazon Aurola でSQL文法エラーになった
発生環境
問題があったAuroraのバージョン* Amazon Aurora : 5.6.10a問題がなかったMySQLのバージョン
* MySQL : 5.7.15 # Amazon Aurora は、MySQL5.6互換らしいので、その差?
現象例
使用するテーブルCREATE TABLE `person` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, `first_name` VARCHAR(50) NULL DEFAULT NULL, `family_name` VARCHAR(50) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COMMENT='人' COLLATE='utf8_general_ci' ENGINE=InnoDB ;現象が発生したSQL文
INSERT INTO person( first_name, family_name) SELECT 'Mike', 'Dean' WHERE NOT EXISTS (SELECT * FROM person WHERE id=1);https://dev.mysql.com/doc/refman/5.6/ja/insert-select.html
を確認したが問題なさそうだが...
原因
* SELECTの後にFROM句がないため
解決案
* 今回のテーマ* DUAL(デュアル)を使用する* 修正後のSQL文(MySQL/Auroraどっちも動く)
INSERT INTO person( first_name, family_name) SELECT 'Mike', 'Dean' FROM DUAL -- ★「FROM DUAL」を追加★ WHERE NOT EXISTS (SELECT * FROM person WHERE id=1);
参考文献
DUAL(デュアル)についてhttp://rnk.mitelog.jp/oyaji/2011/04/mysqldual-70a1.html
http://qiita.com/macoshita/items/e3bd0328cd2e7d4b1bcb
http://thesnowcolor.blogspot.jp/2013/01/mysqldual.html
http://pgman.exblog.jp/9466988/