• ベストアンサー

SQLについての質問

9iです。お世話になります。 次のSQLをどう書けばよいのか分かりませんのでご教示願います。 【テーブルA】 id code 1 1 2 2 3 (null) … 【マスタテーブルB】 code name 1   あ 2   い 【ほしい結果】 id name 1  あ 2  い 3 (null) … 要するにcodeがnullの所はnameをnullにして、nullでないところは、マスタから引っ張ってくるということがやりたいです。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.2

on a.code=b.code ですね。

hide76318
質問者

お礼

普通の外部結合でnullのところも結合されるんですね。 知りませんでした。 ありがとうございます。

その他の回答 (2)

  • uresiiwa
  • ベストアンサー率45% (49/107)
回答No.3

普通は外部結合を使いますが、次のような書き方もあります。 select A.id, ( select B.name from B where B.code = A.id) as name from A; 3行目のところがスカラー副問い合わせという書き方で、マスターテーブルから1カラム1つの値だけ取りたい場合(かつ、無い場合はNULLで良い場合)に使えるやり方です。 結合するテーブル数が多い場合などに、結合テーブル数増加を防ぐことができるので特に有効です。

hide76318
質問者

お礼

スカラー副問合せは聞いたことがありましたが、実際にやり方を知りませんでした。 勉強になります。ありがとうございます。

  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

外部結合すればよいです。 この場合、Aテーブルが元になるので以下のようになります。 SQL標準 select a.id, b.name from table_a a left outer join table_b b on a.id = b.id; OR ORACLE独自文法 select a.id, b.name from table_a a, table_b b where a.id = b.id(+);

hide76318
質問者

補足

お返事ありがとうございます。 > on a.id = b.id ですが、table_bにidという列はありません。

関連するQ&A