Oracle
 sql >> Base de données >  >> RDS >> Oracle

deux jointures externes gauches ne fonctionnent pas Oracle sql

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.