Il semble que le problème soit que vous n'utilisez pas (+)
pour votre language_id
vérifie.
Votre table est jointe en externe, donc language_id
est NULL
lorsqu'aucun enregistrement n'est trouvé, mais que vous vérifiez ensuite language_id = 2
, mais ? language_id
est NULL
.
Je ne vois pas non plus où vous utilisez les résultats de a_tl
ou b_tl
, devinez que c'est juste un problème de votre message, pas votre requête d'origine ?
Cependant, veuillez utiliser des jointures explicites au lieu de l'ancienne syntaxe. Une fois que vous y êtes habitué, il est beaucoup plus facile à lire et à comprendre.
Votre requête pourrait également bénéficier de l'utilisation de COALESCE
(ou NVL
si vous aimez):
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 )
J'espère que j'ai bien compris votre question, veuillez demander si cela ne fonctionne pas.