Oracle
 sql >> Database >  >> RDS >> Oracle

due outer join sinistro non funzionanti Oracle sql

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.