2016-10-31 20 views
0

私は複雑なselect文を作成しています。自分の値(pcf_auto_key)の1つがnullの場合、そのヘッダエントリの値はすべて破棄されません。値がNULLの場合にSQL選択結果が表示されない

select c.company_name, h.prj_number, h.description, s.status_code, h.header_notes, h.cm_udf_001, h.cm_udf_002, h.cm_udf_008, l.classification_code 
from project_header h, companies c, project_status s, project_classification l 
where exists 
    (select company_name from companies where h.cmp_auto_key = c.cmp_auto_key) 
    and exists 
    (select status_code from project_status s where s.pjs_auto_key = h.pjs_auto_key) 
    and exists 
    (select classification_code from project_classification where h.pcf_auto_key = l.pcf_auto_key) 
    and pjm_auto_key = 11 
    --and pjt_auto_key = 10 
    and c.cmp_auto_key = h.cmp_auto_key 
    and h.pjs_auto_key = s.pjs_auto_key 
    and l.pcf_auto_key = h.pcf_auto_key 
    and s.status_type = 'O' 

私の選択ステートメントはどのように見えるのですか?これは他のテーブルから情報を引き出す適切な方法ですか?

これはOracleデータベースであり、SQL Developerを使用しています。

+3

Oracleがnullを処理する方法(特に比較条件を参照)(https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements005.htm#SQLRF30037)を参照してください。また明示的な 'join'構文の使用を検討する必要があります。これにより、ここで必要となる外部結合を簡単に使用できるようになります。表の構造、サンプルデータ、期待される結果が参考になります。 'exists'節は何をしようとしていますか?あなたは既に(暗黙の)ジョイン条件を持っていますか? –

+0

ジョイントマン!!! WHERE句に加えて。あなたがトップ・リザルト・セットを望むことを理解しているものから、インナー・ジョイントと全く同じ他の値が存在する場合のみ –

+0

ありがとう。私は結合を使用する必要があるように見えます。 – StephenP

答えて

0

テーブルに一致するものがない場合は、見つけられるすべてのデータを表示したいが、classificationを空白として表示すると仮定すると、左外部結合を使用できます。これは、明示的な結合構文と非常に明確である:彼らはただ参加条件を複製しているように見えるよう

select c.company_name, h.prj_number, h.description, s.status_code, h.header_notes, 
    h.cm_udf_001, h.cm_udf_002, h.cm_udf_008, l.classification_code 
from project_header h 
join companies c on c.cmp_auto_key = h.cmp_auto_key 
join project_status s on s.pjs_auto_key = h.pjs_auto_key 
left join project_classification l on l.pcf_auto_key = h.pcf_auto_key 
where pjm_auto_key = 11 
and s.status_type = 'O' 

私はexists条件を取り出しました。

他のテーブルで一致するデータがない場合は、同じ方法で他の内部結合を外部結合にすることができますが、外部結合をproject_statusにする場合は、statatus_typeチェックを移動する必要がありますまたはOracleはこれを内部結合に変換します。

Read more about the different kinds of joins

+0

ありがとう!私は、結合を使用して、結合を左にする必要があると思います。私は左の結合が何であるか知りませんので、読書をする必要があります。乾杯、 – StephenP

関連する問題