- ベストアンサー
複数外部結合による値の取得ができない理由とは?
- 複数外部結合による値の取得ができない理由を説明します。
- A, B, Cというテーブルがあり、特定の条件で結合させることで値を取得しようとしますが、Dというテーブルが加わることで値の取得ができなくなります。
- これは、外部結合の条件によって値が存在しない場合に、結果がnullとなり、値を取得できなくなるためです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ややこしくなるので、以下では、Cに関する記述を省略して書きます。 (+)記号を使って外部結合しているので、オラクルですよね。 まず、確認したいのですが・・ A.key1 = B.key1 (+) and A.key2 = B.key2 (+) and A.key1 = D.key1 (+) and A.key2 = D.key2 (+) とせず A.key1 = B.key1 (+) and A.key2 = B.key2 (+) and B.key1 = D.key1 (+) and B.key2 = D.key2 (+) と書く意味はあるんですか? 仮に、何らかの理由で、書く意味があったとして・・ オラクルの古い外部結合は・・ 外部結合するテーブルは、whereの各要素すべてに、(+)を書かなければなりません。 (そうでないと旨くいくときとダメなときがある、そしてマニュアルにも”書け”とある) なので、 A.key1 = B.key1 (+) and A.key2 = B.key2 (+) and B.key1(+) = D.key1 (+) and B.key2(+) = D.key2 (+) な感じで書くことを要求されるわけだけど、そんな条件は書けない。 よって、 select * from d, ( select a.key1 a_key1,a.key2 a_key2,b.key1 b_key1,b.key2 b_key2 from a,b where a.key1=b.key1(+) and a.key2=b.key2(+) ) ab where ab.b_key1=d.key1(+) and ab.b_key2=d.key2(+) な段階的な書き方を書かざるおえません。
お礼
ちょっと説明のしかたがまずかったですね。 わかりにくい質問に回答していただいてありがとうございました。 そのやりかたでちょっと検討させていただきます。