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

結合について質問です。

■テーブル
TOIAWASE A
KOKYAKU B
TOIAWASE_TAISHOU C
MOUSIKOMI_INFOMATION D
MOUSIKOMI_INFOMATION E
KINMU_MASTER F

■結合
A.KOKYAKU_NO = B.KOKYAKU_NO AND ※1:1
A.TOIAWASE_NO = C.TOIAWASE_NO(+) ※1:1
C.MOUSIKOMI_TYPE = D.MOUSIKOMI_TYPE(+) ※1:1
D.OLD_MOUSIKOMI_TYPE = E.MOUSIKOMI_TYPE(+) ※1:1
A.KINMU_CD = F.KINMU_CD(+) ※1:1

■データ整合性について
Aがある場合、Bは必ずあります。
Aがある場合、Cはあるとは限りません。
Cがある場合、Dは必ずあります。
Dがある場合、Eがあるとは限りません。
Aがある場合、Fがあるとは限りません。

Aをもとに問い合わせ一覧を取得したいです。
Aがある場合、Cがあるとは限らないため、それに紐づくテーブルは全て外部結合をするしかありません。
一応、上記SQLでも取得はできるのですが、他に良い(効率の良い)SQLはないのでしょうか?
宜しくお願いします。

A 回答 (2件)

#1さんの言うANSI方式でSQLを書いた方が分かりやすいかも・・・



SELECT AB.*, CD.*, E.*, F.*
FROM (
SELECT A.*, B.*
FROM TOIAWASE A
INNER JOIN KOKYAKU B
ON(A.KOKYAKU_NO = B.KOKYAKU_NO)
) AB
LEFT JOIN (
SELECT C.*, D.*
FROM TOIAWASE_TAISHOU C
INNER JOIN MOUSIKOMI_INFOMATION D
ON(C.MOUSIKOMI_TYPE = D.MOUSIKOMI_TYPE)
) CD
ON(AB.TOIAWASE_NO = CD.TOIAWASE_NO)
LEFT JOIN MOUSIKOMI_INFOMATION E
ON(CD.OLD_MOUSIKOMI_TYPE = E.MOUSIKOMI_TYPE)
LEFT JOIN KINMU_MASTER F
ON(AB.KINMU_CD = F.KINMU_CD)
WHERE 「その他選択条件」

こんな感じかなぁ・・・
    • good
    • 0

こんにちは。



いいかどうかはわからないのですが・・・、普通にANSIで書いた方が分かり易くないですか?

AとBを等結合(INNER JOIN)したテーブルをA'
CとDを等結合(INNER JOIN)したテーブルをC'
C'とEを外部結合(OUTER JOIN)したテーブルをC''
と置くと、
A'とC''とFを外部結合にすればいいだけになります。

(+)で書くと、複数ある場合にわかりにくくなります・・・。
Oracle固有ですし・・・。
    • good
    • 0

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