Parece que o problema é que você não está usando
(+)
para seu language_id
checks.Sua tabela tem junção externa, então
language_id
é NULL
quando nenhum registro é encontrado, mas você verifica language_id = 2
, mas ? language_id
é NULL
. Também não vejo onde você usa resultados de
a_tl
ou b_tl
, acho que é apenas um problema da sua postagem, não da sua consulta original? No entanto, use junções explícitas em vez da sintaxe antiga. Depois de se acostumar, fica muito mais fácil ler e entender.
Sua consulta também pode se beneficiar do uso de
COALESCE
(ou NVL
se você gostar):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 )
Espero que eu tenha entendido sua pergunta, por favor, pergunte se não funcionar.