sql >> Databáze >  >> RDS >> Oracle

Oracle a Left Outer Join

Tito uživatelé se vrátí, ale vrátí se jako null pro všechny sloupce vrácené v tabulkách, kde levé spojení nenalezlo správné spojení.

Vzhledem k tomu, jak ANSI null fungují, b4_.ACTIVE=1 bude pro tyto záznamy neplatné, protože null <> 1

Zkuste restrukturalizovat svůj blok where následovně:

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)

Dalším způsobem, jak to vyřešit, je přidat předpoklady k vašim levým spojením. Můžete to udělat stejně jako já níže a vyloučíte odznaky, kde AKTIVNÍ <> 1 vyloučí špatné odznaky, a přesto vrátí všechny uživatele.

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



  1. Dotaz MySQL pomocí SUM() nevrací očekávané výsledky

  2. Vložení e-mailové adresy do pole tabulky

  3. připojovací řetězec mySQL přes tunel SSH bez hesla

  4. SQL Server 2008 GEOGRAPHY STDistance() hodnota