Sieht so aus, als ob das Problem darin besteht, dass Sie (+)
nicht verwenden für Ihre language_id
überprüft.
Ihre Tabelle ist Outer-Joined, also language_id
ist NULL
wenn kein Datensatz gefunden wird, aber dann suchen Sie nach language_id = 2
, aber ? language_id
ist NULL
.
Ich sehe auch nicht, wo Sie Ergebnisse von a_tl
verwenden oder b_tl
, schätze, das ist nur ein Problem deines Beitrags, nicht deine ursprüngliche Anfrage?
Verwenden Sie jedoch statt der alten Syntax explizite Joins. Sobald Sie sich daran gewöhnt haben, ist es viel einfacher zu lesen und zu verstehen.
Ihre Anfrage könnte auch von der Verwendung von COALESCE
(oder NVL
wenn du magst):
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 )
Ich hoffe, ich habe Ihre Frage richtig verstanden. Bitte fragen Sie, wenn es nicht funktioniert.