Zdá se, že problém je v tom, že nepoužíváte (+)
pro vaše language_id
zkontroluje.
Vaše tabulka je externí, takže language_id
je NULL
když není nalezen žádný záznam, ale pak zkontrolujete language_id = 2
, ale ? language_id
je NULL
.
Také nechápu, kde používáte výsledky z a_tl
nebo b_tl
, hádejte, že je to jen problém vašeho příspěvku, nikoli vašeho původního dotazu?
Místo staré syntaxe však použijte explicitní spojení. Jakmile si na to zvyknete, je mnohem snazší jej číst a pochopit.
Váš dotaz by také mohl mít prospěch z použití COALESCE
(nebo NVL
pokud chcete):
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 )
Doufám, že jsem vaši otázku pochopil správně, zeptejte se, pokud to nefunguje.