• 締切済み

結合について質問です。

結合について質問です。 ■テーブル 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はないのでしょうか? 宜しくお願いします。

みんなの回答

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.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 「その他選択条件」 こんな感じかなぁ・・・

回答No.1

こんにちは。 いいかどうかはわからないのですが・・・、普通にANSIで書いた方が分かり易くないですか? AとBを等結合(INNER JOIN)したテーブルをA' CとDを等結合(INNER JOIN)したテーブルをC' C'とEを外部結合(OUTER JOIN)したテーブルをC'' と置くと、 A'とC''とFを外部結合にすればいいだけになります。 (+)で書くと、複数ある場合にわかりにくくなります・・・。 Oracle固有ですし・・・。