2017-07-26 14 views
0

私は、Oracle SQLで次のコード行がありますこの行のコードをWHERE句に変更するにはどうすればよいですか?

LEFT OUTER JOIN lrmi_dba.rte_session_info si 
      ON si.rte_session_id 
WHERE si.rte_session_id = TO_CHAR(USERENV('SESSIONID')) 

これは動作しません:

LEFT OUTER JOIN lrmi_dba.rte_session_info si 
      ON si.rte_session_id = TO_CHAR(USERENV('SESSIONID')) 

を私はWHERE句、のようなものにコードのこの部分を変更したいと思います。誰もこれを行う方法を知っていますか?

ありがとうございました!

+1

あなたが使用することができます: "LEFT OUTERは1 = 1 WHERE si.rte_session_id = TO_CHAR(USERENV( 'SESSIONID'))ON lrmi_dba.rte_session_info SIを登録しよう"。しかし、なぜ? –

+0

'ON'句で書くフィルタ条件は、左側のテーブルから' ALL'の結果をとり、 'session_id'で渡された' lrmi_dba.rte_session_info'テーブルの結果と一致するものだけを返します。しかし、条件をwhere句に移動したい場合は、まず、 'rte_session_id'が等しいテーブルからすべての結果を取得し、最後にsession_idに渡された結果だけを取得することを意味します。要するに、 – Deepshikha

+0

つまり、これらのクエリは 'NULL'のために異なっています。効果的に 'LEFT OUTER JOIN lrmi_dba.rte_session_info si .. WHERE si.rte_session_id = ..'はINNER JOINです。 – Serg

答えて

0

あなたは同じ値(主にキー列)でカラムを使用して別のテーブルにテーブルを接続する必要が

LEFT OUTER JOIN lrmi_dba.rte_session_info si 
    ON si.rte_session_id = another table's column 
WHERE si.rte_session_id = TO_CHAR(USERENV('SESSIONID')) 

SAMPLE

FROM abcd.table1 t1 
LEFT OUTER JOIN lrmi_dba.rte_session_info si 
    ON si.rte_session_id = t1.session_id 
WHERE si.rte_session_id = TO_CHAR(USERENV('SESSIONID')) 
2

あなたがオンになりますWHERE句を使用している場合内部結合への外部結合。それで、ON句に入れてください:

LEFT OUTER JOIN 
lrmi_dba.rte_session_info si 
ON si.rte_session_id AND 
    si.rte_session_id = TO_CHAR(USERENV('SESSIONID')) 

これは、コードの開始方法です。 ON句に条件を残します。

0

おそらく、あなたはUSINGを使用することができます。

LEFT OUTER JOIN lrmi_dba.rte_session_info si 
    USING (rte_session_id) 
WHERE si.rte_session_id = TO_CHAR(USERENV('SESSIONID')) 

これは、あなたがlrmi_dba.rte_session_infoに参加しているテーブルもrte_session_idという名前の列を持っていることを前提としています。

幸運のベスト。

0

あなたはこのように試すことができます:

LEFT OUTER JOIN lrmi_dba.rte_session_info si 
     ON si.rte_session_id = si.rte_session_id WHERE si.rte_session_id = TO_CHAR(USERENV('SESSIONID')) 
関連する問題