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

Oracle et jointure externe gauche

Ces utilisateurs reviennent, mais ils reviennent comme nuls pour toutes les colonnes renvoyées dans les tables où la jointure gauche n'a pas trouvé de jointure appropriée.

En raison de la façon dont ANSI nulls workb4_.ACTIVE=1 ne sera pas valide pour ces enregistrements car null <> 1

Essayez de restructurer votre bloc where comme suit :

AND (b4_.ACTIVE=1 or b4_.ACTIVE is null) 
    AND (B4_.STATUS='A' or B4_.STATUS is null) 
    AND (UB2_.VISIBLE=1 or UB2_.VISIBLE is null)
    and (bl3_.ACTIVE=1 or bl3_.ACTIVE is null)

Une autre façon de résoudre ce problème consiste à ajouter les prérequis à vos jointures gauches. Vous pouvez faire comme je l'ai fait ci-dessous et cela exclura les badges où ACTIVE <> 1 excluant les mauvais badges et renverra toujours tous les utilisateurs.

 left outer join
        REWARD.BADGES b4_ 
            on bl3_.BADGEID=b4_.ID 
                AND b4_.ACTIVE=1