我有表 Party 列party_Id, party_type
当我使用以下查询时,我得到两种不同类型的结果。
SELECT * FROM party WHERE party_type = null
什么都不返回
SELECT * FROM party WHERE party_type IS NULL
返回所有可能的行
需要一个应该接受 null 和值的查询。
我有表 Party 列party_Id, party_type
当我使用以下查询时,我得到两种不同类型的结果。
SELECT * FROM party WHERE party_type = null
什么都不返回
SELECT * FROM party WHERE party_type IS NULL
返回所有可能的行
需要一个应该接受 null 和值的查询。
根据 SQL 标准,比较(和布尔运算)使用 3-Value logic
(true, false, unknown)
,未知由 表示NULL
。以下表达式返回未知(由 表示NULL
):然而
将返回一个纯布尔值
(true, false)
。您可能想要一个“NULL 安全比较谓词”:
请参见比较谓词
查询:
返回 [predicate] 计算结果为 TRUE 的所有行。
域为 FALSE、TRUE、NULL 的 equals 的真值表
在这种情况下,NULL 可以被认为是 UNKNOWN,也就是说,如果我们将某些东西与 UNKNOWN 进行比较,结果是 UNKNOWN(包括如果我们将 UNKNOWN 与 UNKNOWN 进行比较)。
你的第一个谓词:
因此总是评估为 NULL,因此,查询不会返回任何行。
IS NULL
是一个特殊的谓词,可用于测试某物是否为空。它根据以下内容进行评估:因此,当 party_type IS NULL 并且从查询返回这些行时,您的第二个谓词的计算结果为 TRUE。
NULL 表示没有值
如果您要查找 NULL 字段,则必须使用:
如果您需要空(字符串)或空字段,您应该检查这两个条件:
或者您可以在字段为空时强制结果: