• 締切済み

外部結合で表示されないレコードがある

いつもお世話になっております。 SQLで3つのテーブルの結合をして、結果を得たいのですが、 空欄があるために表示されないレコードがあります。 どうすれば表示できるか、どなたか教えていただけないでしょうか? テーブルが A:明細(call_data) B:業者(m_price) C:料金(m_cust) とあり、 SELECT c.area_id, m.cust_id, p.price FROM call_data c, m_cust m, m_price p where c.calling_num = m.orig_opn_dgt(+) and m.cust_id = p.cust_id and p.area_id = c.area_id(+) ; としたのですが、A.明細データのarea_idで空欄のレコードは 出力されませんでした。 (+)を使うと外部結合で片方のデータを出力できると思ったのですが、それができないのは何が原因なのでしょうか? c_id a_id price 1 111 10.2 2 222 15.5 3 333 20 1 4 111 10.25 2 111 13.5 5 222 12 6 888 6 666 17.55 と出て欲しいところが c_id a_id price 1 111 10.2 2 222 15.5 3 333 20 4 111 10.25 2 111 13.5 5 222 12 6 666 17.55 とでます。 分かりづらくて申し訳ありません。 よろしくお願いいたします。

みんなの回答

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

>where c.calling_num = m.orig_opn_dgt(+) >and m.cust_id = p.cust_id >and p.area_id = c.area_id(+) ; 向きがバラバラです。 エイリアス c に(+)を付けるのなら、すべての cエイリアスに(+)を付けなければいけません。エイリアス m も同様ですね。 条件によって付ける/付けないではなく、テーブルのエイリアス単位に付ける必要があります。 また、ORACLEでも9i以降であれば、MySQL同様、「LEFT JOIN」のANSI構文が使えます。

tao0417
質問者

補足

ORACLEでしたか。すいません。 ご指摘のように、(+)をすべてのc側に付けますと 「表が少なくとも1つの他の表に 外部結合されている可能性があります」 と出てしまいます。 これはどうしたらよいのでしょうか?