|
>> INSERT INTO テーブルA(主キー, フィールド1, フィールド1, フィールド1・・・) >> SELECT MAX(主キー) + 1, フィールド1, フィールド1, フィールド1・・・ >> FROM テーブルA >> WHERE 主キー = @主キー
>これ、SQL としていろいろおかしいような…。
>掲示板投稿時の転記ミスかもしれませんが、第 2 列以降が >すべて「フィールド1」になっている点が明らかに不自然です。
>それに何よりも、MAX 関数を使うなら、集合関数以外のフィールドに対して >GROUP BY が指定されていないので、文法面でエラーになるはずですよね。
>仮に GROUP BY を転記し忘れただけだとしても、今回のケースで WHERE 句を書いては駄目でしょう。 >「MAX(主キー) + 1」によって得たいのは「テーブルA に登録済みの全レコードに対する、最大の主キー値」なのに、 >余計な『WHERE 主キー = @主キー』があるために、単一行の中での MAX 集計が行われてしまうので、 >これでは「@主キー + 1」と大差がなく、キー競合を防ぐことができません。
魔界の仮面弁士様、いつもありがとうございます。
>それに何よりも、MAX 関数を使うなら、集合関数以外のフィールドに対して >GROUP BY が指定されていないので、文法面でエラーになるはずですよね。
実行時のエラーコードは「この列は集計関数または GROUP BY 句に含まれていません。」です。 WHERE 主キー = @主キー句は削除してみましたが同じエラーとなります。
フィールド1, フィールド1, フィールド1・・・は正しくは フィールド1, フィールド2, フィールド3・・・でした、すいません。
これらすべてのフィールドに対して「GROUP BY 句に含まれていません。」が発生します。 すみません「集合関数以外のフィールドに対してGROUP BY が指定」されるとはどのようなことなのでしょうか?
|