電子書籍の厳選無料作品が豊富!

A, B, C というテーブルがあります。

Aはkey1, key2, key3, key4, key5 を持ち、
Bはkey1, key2,
Cはkey3, key4, key5 を持っています。

A---
key1key2key3key4key5
001002001002003

B---
key1key2
001002

C---
key3key4key5
001002003

A, B, C を以下のように外部結合すれば値は取得できますが、

A.key1 = B.key1 (+)
A.key2 = B.key2 (+)
A.key3 = C.key3 (+)
A.key4 = C.key4 (+)
A.key5 = C.key5 (+)

B.key1B.key2C.key1C.key2C.key3
001002nullnullnull
nullnull001002003

ここに key1, key2 を持つDというテーブルを以下の様に
外部結合しても、値を持ってくることができません。

D---
key1key2
001002

A.key1 = B.key1 (+)
A.key2 = B.key2 (+)
A.key3 = C.key3 (+)
A.key4 = C.key4 (+)
A.key5 = C.key5 (+)
B.key1 = D.key1 (+)
B.key2 = D.key2 (+)

B.key1B.key2C.key1C.key2C.key3D.key1D.key2
001002nullnullnullnullnull
nullnull001002003nullnull

これってなんででしょうか?

よろしくお願いします.

A 回答 (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(+)

な段階的な書き方を書かざるおえません。
    • good
    • 0
この回答へのお礼

ちょっと説明のしかたがまずかったですね。
わかりにくい質問に回答していただいてありがとうございました。

そのやりかたでちょっと検討させていただきます。

お礼日時:2005/12/14 00:15

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