プロが教えるわが家の防犯対策術!

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でないところは、マスタから引っ張ってくるということがやりたいです。
宜しくお願いします。

A 回答 (3件)

on a.code=b.code


ですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/24 09:15

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



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

3行目のところがスカラー副問い合わせという書き方で、マスターテーブルから1カラム1つの値だけ取りたい場合(かつ、無い場合はNULLで良い場合)に使えるやり方です。
結合するテーブル数が多い場合などに、結合テーブル数増加を防ぐことができるので特に有効です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/24 09:16

外部結合すればよいです。


この場合、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という列はありません。

補足日時:2008/03/21 11:33
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!