- - PR -
SELECT文での抽出方法について
1
| 投稿者 | 投稿内容 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-21 18:09
初めて書き込みさせていただきます。ORACLE8iです。
table1: KEY1 KEY2 KEY3 tbl1_1 tbl1_2 tbl1_3 1 1 1 01 02 03 1 1 2 01 02 03 table2: KEY1 KEY2 KEY3 KEY4 tbl2_1 1 1 1 01 AAAAA 1 1 1 02 BBBBB 1 1 1 03 CCCCC 1 1 2 01 DDDDD 抽出結果: result1 result2 result3 AAAAA BBBBB CCCCC DDDDD table1は全件取得する仕様です。 table1とtable2のKEYとtbl1_1〜3とKEY4をつき合わせて、table2のtbl2_1の項目を取得したいです。 自分で作ったSQLは以下ものです。もっとキレイにできる方法はないでしょうか? ご教授お願い致します。 SELECT result1, result2, result3 FROM table1 A, table2 B, table2 C, table2 D WHERE A.KEY1=B.KEY1(+) AND A.KEY2=B.KEY2(+) AND A.KEY3=B.KEY3(+) AND A.tbl1_1=B.KEY4(+) AND A.KEY1=C.KEY1(+) AND A.KEY2=C.KEY2(+) AND A.KEY3=C.KEY3(+) AND A.tbl1_2=C.KEY4(+) WHERE A.KEY1=D.KEY1(+) AND A.KEY2=D.KEY2(+) AND A.KEY3=D.KEY3(+) AND A.tbl1_3=D.KEY4(+) ; | ||||||||||||||||
|
投稿日時: 2006-02-21 20:07
っていうのはどうでしょうか? [ メッセージ編集済み 編集者: かずくん 編集日時 2006-02-23 09:11 ] | ||||||||||||||||
|
投稿日時: 2006-02-22 09:45
ありがとうございます。
実際に自分でも確認できました。助かりました。 正直、DECODEもGROUPBYも知っていても、どういう時に使うのかが分かっていませんでした。 今回はtable2での該当データがない場合は、NULLを返す仕様なのでOKですが、 もし、「XXXXX」を返すような仕様の場合は使えませんよね?その場合はどのような SQLになるのでしょうか? select max(decode(key4, tbl1_1, tbl2_1, 'XXXXX')) result1 2 , max(decode(key4, tbl1_2, tbl2_1, 'XXXXX')) result2 3 , max(decode(key4, tbl1_3, tbl2_1, 'XXXXX')) result3 実際の結果: XXXXX XXXXX XXXXX DDDDD XXXXX XXXXX 希望抽出結果: result1 result2 result3 AAAAA BBBBB CCCCC DDDDD XXXXX XXXXX | ||||||||||||||||
|
投稿日時: 2006-02-22 14:57
とすれば、
となります。 が、、、データに 'YYYYY' や 'ZZZZZ' があると駄目なんですよね。 なので、
でしょうね。 # 最初に提示したものは '' としていますが、Oracle では null となります # 結果は同じですが今度は、明示的に null にしてます。 [ メッセージ編集済み 編集者: かずくん 編集日時 2006-02-23 09:10 ] | ||||||||||||||||
|
投稿日時: 2006-02-22 15:07
本当にありがとうございました。
とても分かりやすい回答で納得できました。ありがとうございます。 | ||||||||||||||||
1
