- - PR -
Decode 関数のパラメータにテーブルデータを使いたい
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2005-12-01 10:52
お世話になります。
Oracle の Decode 関数に関して皆様のお知恵を拝借したいと思います。 通常、 Decode は以下のように行うと思います。 SELECT NAME "氏名" , SEIBETU DECODE( SEIBETU , 1 , '男' , '女' ) "性別" FROM PERSONAL ; 氏名 SEIBETU 性別 --------------------- -------- ---- 山田 太郎 1 男 山田 花子 2 女 そして、やりたいのはこの「性別」を別テーブルでマスターとして持たせたいと思っています。 イメージとしては「MASTER_TABLE」のようなテーブルを作成して KEY CODE VALUE --- -------- ------- 101 1 男 101 2 女 というデータを保持します。 このマスターデータの「CODE」と先ほどのテーブルの「SEIBETU」を比較し、 一致した「VALUE」を表示させたいと思っています。 <補足> Key というのは性別データのコードとなります。 マスターテーブルなので、他のマスターデータも設定されるため。。。 イメージとしてはこんな感じです。 KEY CODE VALUE --- -------- ------- 101 1 男 101 2 女 102 12 千葉 102 13 東京 102 14 神奈川 103 1 白 103 2 黒 </補足> 実際にはテーブルを Join させて Select すればいいのかな、と思っているのですが その SQL が思いつきません。 ちなみに、環境は Oracle 9 です。 宜しくお願いいたします。 | ||||
|
投稿日時: 2005-12-01 11:14
こんな感じでできませんか?
| ||||
|
投稿日時: 2005-12-01 11:36
もしくは、こんな感じ?
| ||||
|
投稿日時: 2005-12-01 11:38
こんにちわ。
試してはいませんが、こんなのはどうですか? SELECT PERSONAL.NAME "氏名", MASTER.VALUE "性別" FROM PERSONAL LEFT OUTER JOIN MASTER ON (PERSONAL.CODE=MASTER.CODE AND MASTER.KEY='101'); [ メッセージ編集済み 編集者: さぷり 編集日時 2005-12-01 11:49 ] | ||||
|
投稿日時: 2005-12-01 13:12
お世話になります。
分かり難い日本語かな、と思ったのですが、 短時間にレスを頂けるとは思っていませんでしたので 非常に嬉しく思います。 ありがとうございます。 結果的に夏椰【SUICA】さんの案で行きたいと思います。 残りお二方の方法ですと、例えば 「同じ Select 文で都道府県も Decode したい」という 仕様が発生した場合、お二方の方法だと From 以降の文が長くなってしまうかなぁ、と思いましたので。 ( そんな事は無い? ) 実際の業務で使用する際は数十個の項目に関して Decode を行うので、 取得対象テーブルを追加すると SQL 文が大変かなぁ、と思い。 結構悩んだ問題ですが、お知恵を拝借出来て問題解決出来ました。 今後も宜しくお願いいたします。 | ||||
|
投稿日時: 2005-12-01 13:38
処理の見通し全体を考えると、さぷりさんが書かれた join による方法にも慣れておいた方が良いですよ。 確かに長くはなりますね。 先々月だったかと思いますが、一つのテーブルが foreign key で子供テーブルを持つという階層が 3 層、各テーブルがコードを持ち、それをマスタテーブル参照により名称に置換して取得するという処理を単独の SQL 文として書く必要に迫られました。 WITH 句を用いたためとは言え、500 行を越える単一クエリは、自分で書いておいてナンですが「圧巻」の一言に尽きました。 (サブクエリによる方法だと、もっと複雑になったと思います。) # でももっと上の規模のクエリをすらすら書く人もいるんだろうな... ←遠い目 | ||||
|
投稿日時: 2005-12-01 15:04
> 処理の見通し全体を考えると、さぷりさんが書かれた
> join による方法にも慣れておいた方が良いですよ。 そうですね。 色々な書き方を覚えていた方が将来助かりますよね。 DB はちょっぴり苦手なのですが、これを機会に勉強したいと思います。 > 「圧巻」の一言に尽きました。 確かにそれくらいのスケールだと感動してしまいますねぇ。 私もそーいうのを書く日が来るのでしょうか??? 色々とありがとうございました。 | ||||
1
