Изглежда, че проблемът е, че не използвате (+)
за вашия language_id
проверки.
Таблицата ви е външно свързана, така че language_id
е NULL
когато не е намерен запис, но след това проверявате за language_id = 2
, но ? language_id
е NULL
.
Също така не виждам къде използвате резултати от a_tl
или b_tl
, предполагам, че това е проблем само на публикацията ви, а не на първоначалното ви запитване?
Въпреки това, моля, използвайте изрични съединения вместо стария синтаксис. След като свикнете с него, е много по-лесно за четене и разбиране.
Вашата заявка също може да се възползва от използването на COALESCE
(или NVL
ако желаете):
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 )
Надявам се, че разбрах правилно въпроса ви, моля, попитайте, ако не работи.