【SQL】INSERT時にカラムの最大値+1を持ってくる方法
新しいブログをはじめました!
ブログ名:筋肉カメレオン
WordpressやAWS、時々筋トレについて書いてます。
AUTO INCREMENTを使えば済む話かもしれないけど、他のテーブルのカラムを参考にする場合などに役立つかも。ただ実際はTRANSACTIONでロックを掛けないとヤバイことになるので注意。
【パターン1】◎推奨
INSERT INTO テーブルA (カラムA, カラムB, カラムC) SELECT 値, 値, MAX(カラムC) + 1 FROM テーブルB;
INSERT INTO テーブルA (カラムA, カラムB, カラムC) SELECT 値, 値, CASE WHEN MAX(カラムC) IS NULL THEN 1 ELSE MAX(カラムC)+1 END , FROM テーブルB;
※テーブルAとテーブルBは、同じものでも異なるものでも構わない。
【パターン2】
DECLARE @MAX INT SELECT @MAX = カラムC FROM テーブルB INSERT INTO テーブルA (カラムA, カラムB, カラムC) VALUES (値, 値, @MAX+1);
DECLARE @MAX INT SELECT @MAX = カラムC FROM テーブルB INSERT INTO テーブルA (カラムA, カラムB, カラムC) VALUES (値, 値, CASE WHEN @MAX IS NULL THEN 1 ELSE @MAX+1 END );
※テーブルAとテーブルBは、同じものでも異なるものでも構わない。
INSERTって実は2通りのやり方があるらしい。
(1)insert into 表名[(列名,列名,...)] values(値,値,...)
http://oshiete1.goo.ne.jp/qa2982740.html
(2)insert into 表名[(列名,列名,...)] select文
(1)しか知らなかった・・・。覚えておこう。
★20080123修正しました。
DBがまっさらな状態の時を考えてなかったので、データがNULLだったら1を代入させました。
- -
新しいブログをはじめました!
ブログ名:筋肉カメレオン
https://kinchame.com/