Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

duas junção externa esquerda não funciona Oracle sql


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.