質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

261閲覧

SQL 結合した後の分岐処理で悩んでいます。

KINGFROG

総合スコア27

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/03/07 14:26

テーブルA,テーブルB、テーブルCがあるとします。
それぞれに契約番号が存在しています。
まず、テーブルAとテーブルBを外部結合した後に契約番号にデータがなかった場合はテーブルAとテーブルCを外部結合して、計約番号を取ってくるという処理ですが、
caseを使用すれば処理が上手くいくのではと思っています。

他に何か良い関数などあれば教えて頂ければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

テーブルAとテーブルBを外部結合した後に契約番号にデータがなかった場合はテーブルAとテーブルCを外部結合して

SQLを考える時、from句に指定するのは、結合条件を可変にするのではなく、あくまで一つの表を構成するものと考えた方が自然です。

その上で、その表の項目からどのように取り出すかをSELECT で指定します。

今回の場合、外部結合のキーが「契約番号」であるなら、Nullかどうかの判断のみで良いですが、
そうでない場合は、「契約番号」が有効で無い値が、Null以外かどうかも関係してきます。

Null値であるならCOALESCE()やNVL()の判定で。
NULL を別の値に置換、リストから最初の NULL 以外の値を探す

Null値以外ならCASE式での判断で。
SQL の IF 「CASE 〜 WHEN 式」

投稿2018/03/07 17:23

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KINGFROG

2018/03/18 09:41

有難う御座いました! 無事に実装できました!
guest

0

NVL関数で引けると思います、、、

SQL

1SELECT 2 NVL(b.計約番号,c.計約番号) 3FROM 4 atable a 5outer join btable b 6on a.契約番号 = b.契約番号 7outer join ctable c 8on a.契約番号 = c.契約番号

が、各テーブルの件数によりけりってところです。
件数が多かったり、
適正なインデックスがない場合はちょっと検討したほうがいいです。

投稿2018/03/07 15:13

szk.

総合スコア1400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KINGFROG

2018/03/18 09:42

有難う御座いました! とても参考になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問