Wygląda na to, że problem polega na tym, że nie używasz (+)
dla Twojego language_id
sprawdza.
Twoja tabela jest połączona na zewnątrz, więc language_id
jest NULL
gdy nie znaleziono żadnego rekordu, ale sprawdzasz, czy language_id = 2
, ale ? language_id
jest NULL
.
Nie widzę też, gdzie używasz wyników z a_tl
lub b_tl
, domyślasz się, że to tylko problem z Twoim postem, a nie z pierwotnym zapytaniem?
Należy jednak używać jawnych złączeń zamiast starej składni. Gdy już się do tego przyzwyczaisz, będzie to o wiele łatwiejsze do odczytania i zrozumienia.
Twoje zapytanie może również skorzystać z użycia COALESCE
(lub NVL
jeśli chcesz):
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 )
Mam nadzieję, że dobrze odpowiedziałem na Twoje pytanie, zapytaj, czy to nie działa.