我有這兩張桌子school_classes和classes.
school_classes
------------------------
id | class_id
1 | 2
2 | 1
classes
------------------------
id | status | name
1 | null | A
2 | null | B
3 | Active | C
4 | Cancelled | D
這是我正在嘗試的查詢,
select
c.status, c.name
from
school_classes sc
join classes c on
sc.class_id = c.id and (LOWER(c.status) != 'cancelled')
where
sc.id = 1
對于上述查詢,它回傳空結果。但我的理解lower(null)是'null'不等于,'cancelled'所以它應該回傳該行。
當我將狀態從 null 更改為其他字串時,將回傳該行。
uj5u.com熱心網友回復:
我的理解
lower(null)是'null'……
會的NULL,不會'null'的。缺少的引號很重要,表示它不是字串而是真正的NULL值 - 或者null,大寫無關緊要。
有多種修復方法,IS NOT TRUE可能最簡單:
AND (lower(c.status) = 'cancelled') IS NOT TRUE
額外的括號是可選的,因為無論如何運算子優先級都對我們有利。
看:
- 檢查“空值或空值”的最佳方法
uj5u.com熱心網友回復:
如果要檢索空值,可以檢查它們,如下所示:
select
c.status, c.name
from
school_classes sc
join classes c on
sc.class_id = c.id
and (LOWER(c.status) != 'cancelled' or c.status is null)
where
sc.id = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/425002.html
標籤:sql PostgreSQL 空值
