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
而不是 =
我有一个 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
而不是 =