質問 |
||
| 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という列はありません。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |