プロが教える店舗&オフィスのセキュリティ対策術

環境
oracle 11g


いつも大変助かっており、お世話になっております。

【テーブル1】
No、ID、大分類、中分類、小分類
1、001、10、0、0
2、001、10、10、0
3、001、10、20、0
4、002、20、30、40

【テーブル2】
No、ID、大分類、中分類、小分類、値
1、001、10、0、0、50
2、001、10、10、0、55
3、002、20、0、0、100
4、002、20、30、0、100


上記のデータあるとします。
select テーブル2.値 from
テーブル1
テーブル2 leftjoin on テーブル1.ID = テーブル2.ID
where テーブル1.大分類 = テーブル2.大分類
and テーブル1.中分類 = テーブル2.中分類
and テーブル1.小分類 = テーブル2.小分類

上記SQLでは、テーブル2.値は、No1の50とNo2の55が取得されます。

これを、
テーブル1のNo3で、
テーブル2のどれにも当て嵌まらない場合、
テーブル1.大分類を10として、テーブル2のNo1の値を取得したいのです。

また、テーブル1のNo4に関しては、
テーブル2のNo4を取得したいのです。


PL/SQL等、プログラムを組まないと取得出来ないものでしょうか?
SQLで取得できるテクニックをご享受頂きたいです。
どうぞ宜しくお願い致します。

質問者からの補足コメント

  • 回答誠にありがとうございます。

    Noはただの項番であり、キーはIDになるのです。
    ご提示頂いたSQL文だと、キーがNoになっており、おかしい抽出になってしまいます。
    NoをIDに変えれば宜しいのですかね。。。

    existsを使用し、ちょっと試してみます。

    ありがとうございます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/04/02 17:56

A 回答 (1件)

select テーブル2.値 from テーブル2


where exists (select * form テーブル1 where テーブル1.No = テーブル2.No and {通常の条件} )
or exists (select * form テーブル1 where テーブル1.No = テーブル2.No and {もう一つの条件} )
or exists (select * form テーブル1 where テーブル1.No = テーブル2.No and {おまけの条件} )
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!