- ベストアンサー
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でないところは、マスタから引っ張ってくるということがやりたいです。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
on a.code=b.code ですね。
その他の回答 (2)
- uresiiwa
- ベストアンサー率45% (49/107)
普通は外部結合を使いますが、次のような書き方もあります。 select A.id, ( select B.name from B where B.code = A.id) as name from A; 3行目のところがスカラー副問い合わせという書き方で、マスターテーブルから1カラム1つの値だけ取りたい場合(かつ、無い場合はNULLで良い場合)に使えるやり方です。 結合するテーブル数が多い場合などに、結合テーブル数増加を防ぐことができるので特に有効です。
お礼
スカラー副問合せは聞いたことがありましたが、実際にやり方を知りませんでした。 勉強になります。ありがとうございます。
- 3rd_001
- ベストアンサー率66% (115/174)
外部結合すればよいです。 この場合、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(+);
補足
お返事ありがとうございます。 > on a.id = b.id ですが、table_bにidという列はありません。
お礼
普通の外部結合でnullのところも結合されるんですね。 知りませんでした。 ありがとうございます。