sql >> Base de Datos >  >> RDS >> Oracle

Unión exterior izquierda y Oracle

Esos usuarios regresan pero regresan como nulos para todas las columnas devueltas en las tablas donde la combinación izquierda no encontró una combinación adecuada.

Debido a cómo funcionan los nulos ANSI, b4_.ACTIVE=1 no será válido para estos registros porque nulo <> 1

Intenta reestructurar tu bloque where de la siguiente manera:

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)

Otra forma de abordar esto es agregar los requisitos previos a sus uniones izquierdas. Puede hacer lo que hice a continuación y excluirá las insignias donde ACTIVO <> 1 excluyendo las insignias malas y aún devolverá a todos los usuarios.

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