- - PR -
oracleSQLについて
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-11-28 23:24
私は今、オラクルのデータベースのデータ移行を行っています。
その移行の過程で2つほど調べてもわからない部分が出てきたので、教えてください。 @新規登録時にシーケンスを使わずに、必ずそのフィールドの最大値+1の値をInsertしたいがどうすれば良いか? A主キーが3つのフィールドからなるテーブルがあり、そのテーブルを外部キーにもつテーブルが2つある状態で、外部キーに持っているテーブル2つを外部結合する方法。 @は、MAX()+1みたいなことができないか試してみましたが駄目でした。 Aについては、主キーが1つであれば結合は簡単だったのですが、複数となるとどのようにすれば良いかがわかりませんでした。 以上、お手数おかけしますが、ご教授お願い致します。 | ||||||||||||
|
投稿日時: 2008-11-29 00:12
@
どのようなことを試されてだめだったのでしょうか?
みたいにして最大値をとって、+1した結果をINSERT文のパラメータに使えばできると思いますが。 それとも、1回のSQL発行で行うとしてうまくいかないということでしょうか。 A イメージがわかないのですが、 ・TABLE_A KEY1 KEY2 KEY3 VALUE ・TABLE_B ID KEY1 KEY2 KEY3 ・TABLE_C ID KEY1 KEY2 KEY3 というようなテーブルがあったとして、TABLE_AにTABLE_B,Cを外部結合する、ということでしょうか。 だとしたら、
でできると思います。 _________________ まさるblog | ||||||||||||
|
投稿日時: 2008-11-30 01:44
まさるさん
レスありがとうございます。 返信遅くなって申し訳ありません。 @1回のSQLの発行で+1したいのです。 INSERT INTO HOGE(ID) VALUES((MAX(SELECT ID FROM HOGE) +1)) という感じでできないかと思ったのですが、できませんでした。 ほかの方法についても、探してはみたのですが、まだみつかっていない状態です。 Aまさるさんの仰るとおりです。 教えていただいた方法で、うまく結合することができました。 ありがとうございます。 | ||||||||||||
|
投稿日時: 2008-11-30 02:38
こんばんは
select insert でできないですかね? たぶんこんな感じ SELECT MAX(ID)+1 FROM HOGE INSERT INTO HOGE; | ||||||||||||
|
投稿日時: 2008-11-30 06:45
INSERT文の構文で、
というものがあります。 このSELECT以降に、末記人さんが書いたような感じで指定してやればうまくいくと思います。 _________________ まさるblog | ||||||||||||
|
投稿日時: 2008-11-30 21:30
>末記人さん
レスありがとうございます。 アドバイスを参考に、SQLを組み立ててみます。 >まさるさん ありがとうございます。 構文についても調べて、実施してみます。 | ||||||||||||
|
投稿日時: 2008-12-01 09:28
は
の間違いでした。INTO TEMPと勘違いしてました。 [hitorigoto] でも、SELECT INSERTって呼びますよね? [/hitorigoto] | ||||||||||||
|
投稿日時: 2008-12-01 09:58
1件目を(ID=1 で)登録する場合も考慮すると、こうしたほうがいいかも。 COALESCE が使えない場合は NVL で。
|