問題は、(+)を使用していないことです。 language_idの場合 チェックします。
テーブルは外部結合されているため、language_id NULLです レコードが見つからないが、language_id = 2をチェックする場合 、 しかし ? language_id NULLです 。
a_tlの結果をどこで使用しているかもわかりません またはb_tl 、それはあなたの投稿の問題であり、元のクエリではないと思いますか?
ただし、古い構文の代わりに明示的な結合を使用してください。慣れれば、読みやすく、理解しやすくなります。
クエリは、 COALESCE
(またはNVL よろしければ):
SELECT COALESCE( a_tl.a_disp_name, a.a_name ) AS a_name,
COALESCE( b_tl.b_disp_name, b.b_name ) AS b_name,
a.a_id,
b.b_id
FROM a
JOIN b ON ( b.b_id = a.a_id )
LEFT JOIN a_tl ON ( a_tl.a_id = a.a_id AND a_tl.language_id = 2 )
LEFT JOIN b_tl ON ( b_tl.b_id = b.b_id AND b_tl.language_id = 2 )
私があなたの質問を正しく理解したことを願っています、それがうまくいかないかどうか尋ねてください。