Sembra che il problema sia che non stai usando (+)
per il tuo language_id
controlli.
La tua tabella è con join esterno, quindi language_id
è NULL
quando non viene trovato alcun record, ma poi controlli language_id = 2
, ma ? language_id
è NULL
.
Inoltre, non vedo dove usi i risultati di a_tl
o b_tl
, indovina che è solo un problema del tuo post, non la tua query originale?
Tuttavia, usa i join espliciti invece della vecchia sintassi. Una volta che ci sei abituato, è molto più facile da leggere e capire.
La tua query potrebbe anche trarre vantaggio dall'utilizzo di COALESCE
(o NVL
se ti piace):
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 )
Spero di aver capito bene la tua domanda, chiedi se non funziona.