MySQLでもサブクエリーが使えることを思い出して、とあるプロジェクトで使ってみることにした。さくっと、以下のようなSQLを書くと・・・
INSERT INTO exam ( type, code ) VALUES (
'A', (
SELECT IFNULL( MAX( code ) + 1, 1000 )
FROM exam WHERE type='A' )
);
#1093 - You can't specify target table 'exam' for update in FROM clause
と怒られてしまった。
正直な話、SQLは得意というわけではないので、 最初はやっぱり無理?と思ってしまった。
が、気を取り直して「mysql 1093」でググってみると、
答えのページを発見。MySQLだからではなく、SQL標準から見ても間違った構文なんだそうだ。