Sepertinya masalahnya adalah, Anda tidak menggunakan (+)
untuk language_id
. Anda cek.
Tabel Anda tergabung di luar, jadi language_id
adalah NULL
ketika tidak ada catatan yang ditemukan, tetapi kemudian Anda memeriksa language_id = 2
, tetapi ? language_id
adalah NULL
.
Saya juga tidak melihat di mana Anda menggunakan hasil dari a_tl
atau b_tl
, kira itu hanya masalah posting Anda, bukan pertanyaan asli Anda?
Namun, harap gunakan gabungan eksplisit alih-alih sintaks lama. Setelah Anda terbiasa, akan jauh lebih mudah untuk membaca dan memahami.
Permintaan Anda juga dapat memanfaatkan COALESCE
(atau NVL
jika Anda suka):
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 )
Semoga pertanyaan Anda benar, tanyakan jika tidak berhasil.