Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle e Left Outer Join

Quegli utenti tornano ma tornano come null per tutte le colonne restituite nelle tabelle in cui il join sinistro non ha trovato un join corretto.

A causa del modo in cui funzionano i valori null ANSIb4_.ACTIVE=1 non sarà valido per questi record perché null <> 1

Prova a ristrutturare il tuo blocco where come segue:

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)

Un altro modo per affrontare questo problema è aggiungere i prerequisiti ai join di sinistra. Puoi fare come ho fatto di seguito ed escluderà i badge in cui ATTIVO <> 1 escluderà i badge danneggiati e restituirà comunque tutti gli utenti.

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