問題は、(+)
を使用していないことです。 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 )
私があなたの質問を正しく理解したことを願っています、それがうまくいかないかどうか尋ねてください。