[pgsql-jp: 30267] Re: SQLのMAX 関数について

Masato Tanaka pgsql @ e-linez.com
2003年 6月 29日 (日) 21:08:26 JST


お返事ありがとうございます。
解決です。

> INSERT INTO table VALUES(SELECT coalesce(MAX(id),0)+1 FROM talbe);
>
> とすれば0が戻ると思います。
> coalesceは値がnullの場合に代替えの値を返す関数です。

なるほど。まさに探していた関数です。

>
> あと、よけいなお節介ですが、新規レコード作成時にmaxで値を取得しようとす
> ると同時に新規作成が発生した場合、同一IDが発生してしまいます。
>
> 今回の場合「IDが主キーではない」「IDに同じ値が発生してもオッケー」または
> 「一度に新規作成するのは必ず1クライアントのみ」ならばmaxでも良いのです
が、
> そうでないならシーケンスを利用したID値生成したほうがいいです。

う。痛いところをつかれました。
シーケンスは仕組みを完全に理解していなく、不安だったもので、
つい、簡単な方へはしってしまいました。。。
この際なので、勉強してみます。

ありがとうございます。





pgsql-jp メーリングリストの案内