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