Het lijkt erop dat het probleem is dat u (+)
. niet gebruikt voor uw language_id
checks.
Uw tafel is aan de buitenkant verbonden, dus language_id
is NULL
wanneer er geen record wordt gevonden, maar u controleert op language_id = 2
, maar ? language_id
is NULL
.
Ik zie ook niet waar je resultaten gebruikt van a_tl
of b_tl
, denk je dat dat gewoon een probleem is van je post, niet je oorspronkelijke vraag?
Gebruik echter expliciete joins in plaats van de oude syntaxis. Als u er eenmaal aan gewend bent, is het een stuk gemakkelijker te lezen en te begrijpen.
Uw vraag kan ook baat hebben bij het gebruik van COALESCE
(of NVL
als je wilt):
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 )
Ik hoop dat ik je vraag goed heb, vraag het alsjeblieft als het niet werkt.