Det verkar som att problemet är att du inte använder (+)
för ditt language_id
kontroller.
Din tabell är yttre sammanfogad, så language_id
är NULL
när ingen post hittas, men då letar du efter language_id = 2
, men ? language_id
är NULL
.
Jag ser inte heller var du använder resultat från a_tl
eller b_tl
, antar att det bara är ett problem med ditt inlägg, inte din ursprungliga fråga?
Använd dock explicita kopplingar istället för den gamla syntaxen. När du är van vid det är det mycket lättare att läsa och förstå.
Din fråga kan också dra nytta av att använda COALESCE
(eller NVL
om du vill):
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 )
Hoppas jag fick rätt på din fråga, fråga gärna om det inte fungerar.