ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3881661 SQLについての質問
質問者:hide76318 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でないところは、マスタから引っ張ってくるということがやりたいです。
宜しくお願いします。
困り度:
  • すぐに回答を!
質問投稿日時:
08/03/21 11:18
この質問に対する回答は締め切られました。

回答良回答10pt

ANo.3 普通は外部結合を使いますが、次のような書き方もあります。

select
A.id,
( select B.name from B where B.code = A.id) as name
from A;

3行目のところがスカラー副問い合わせという書き方で、マスターテーブルから1カラム1つの値だけ取りたい場合(かつ、無い場合はNULLで良い場合)に使えるやり方です。
結合するテーブル数が多い場合などに、結合テーブル数増加を防ぐことができるので特に有効です。
回答者:uresiiwa
種類:回答
どんな人:専門家
自信:自信あり
回答日時:
08/03/22 12:11
この回答へのお礼スカラー副問合せは聞いたことがありましたが、実際にやり方を知りませんでした。
勉強になります。ありがとうございます。

回答良回答20pt

ANo.2 on a.code=b.code
ですね。
回答者:auty
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:
08/03/21 13:02
この回答へのお礼普通の外部結合でnullのところも結合されるんですね。
知りませんでした。
ありがとうございます。

回答

ANo.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(+);
回答者:3rd_001
種類:回答
どんな人:経験者
自信:参考意見
回答日時:
08/03/21 11:32
この回答への補足お返事ありがとうございます。
> on a.id = b.id
ですが、table_bにidという列はありません。
この回答へのお礼この回答にお礼をつける(質問者のみ)