PostgreSQL WHERE 和 null

PostgreSQL WHERE and null

我有一个 table 看起来像这样:

当我尝试根据 pr、sr、sn 仅查找 case_id = 5 的行时,我使用以下代码:

SELECT case_id, dupl_cnt
FROM cases
WHERE pr = NULLIF('', '')::INT AND
      sr = NULLIF('CH_REP13702.10000', '')::VARCHAR AND
      sn = NULLIF('22155203912', '')::VARCHAR

但是,上面的代码没有产生任何结果(空查询结果)。我已将其缩小为 "pr" 值为 null 的某种问题 - 当 "pr" removed 行从上述查询中删除时,它开始按预期工作。有人可以向我解释为什么会这样吗?我预计 pr 或 sr 列有时会包含 NULL 值,但仍然必须能够使用它们查找 case_id 数字。 (NULLIF 函数在那里,因为它是 Python 与 psycopg2 模块集成的一部分,我必须预料到有时数据输入将为这些值提供空字符串)。

NULLIF('', '') returns [null]

满足 pr = [null] 条件的 deos'nt 因为

任何东西 = NULL returns NULL

您需要使用 IS NOT DISTINCT FROM 而不是 =