Những người dùng đó có quay lại nhưng họ quay lại dưới dạng null cho tất cả các cột được trả về trong các bảng mà phép nối bên trái không tìm thấy một phép nối thích hợp.
Do cách ANSI nulls làm việcb4_.ACTIVE =1 sẽ không hợp lệ cho các bản ghi này vì null <> 1
Hãy thử cấu trúc lại khối ở đâu của bạn như sau:
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)
Một cách khác để giải quyết vấn đề này là thêm các điều kiện tiên quyết vào các phép nối bên trái của bạn. Bạn có thể làm như tôi đã làm bên dưới và nó sẽ loại trừ các huy hiệu trong đó ACTIVE <> 1 loại trừ các huy hiệu và vẫn trả lại tất cả người dùng.
left outer join
REWARD.BADGES b4_
on bl3_.BADGEID=b4_.ID
AND b4_.ACTIVE=1