【发布时间】:2013-12-12 19:18:02
【问题描述】:
我有一个困难,因为在比较子查询中的两个字段时,虽然字段相同,即它们都有 NULL 值,但比较返回 FALSE 结果
因此 NULL = NULL 返回 FALSE
现在我知道 NULL 应该与 IS 运算符进行比较,但是当我比较两个字段时,我应该如何知道它们包含空值?如果值是否为 NULL,我需要比较相同数据的两个字段。
考虑这个 SQL:
SELECT
*
FROM
fts.fts_customers_data_50360001
WHERE
fts.fts_customers_data_50360001.record_type = 15
AND
fts.fts_customers_data_50360001.mid = 103650360001
AND NOT EXISTS
(
SELECT
fts.temp_fees_50360001.record_type
FROM
fts.temp_fees_50360001
WHERE
fts.temp_fees_50360001.record_type = fts.fts_customers_data_50360001.record_type
AND
fts.temp_fees_50360001.merch_id = fts.fts_customers_data_50360001.mid
AND
fts.temp_fees_50360001.fee_curr = fts.fts_customers_data_50360001.currency
AND
fts.temp_fees_50360001.card_scheme = fts.fts_customers_data_50360001.card_scheme
AND
fts.temp_fees_50360001.tran_type = fts.fts_customers_data_50360001.fee_type
AND
fts.temp_fees_50360001.area = fts.fts_customers_data_50360001.region
AND
fts.temp_fees_50360001.srvc_type = fts.fts_customers_data_50360001.card_type
);
在上面的查询中,
fts.temp_fees_50360001.card_scheme = fts.fts_customers_data_50360001.card_scheme
两者都有 NULL 值,但比较返回 false .. 太糟糕了
任何想法都会受到赞赏
【问题讨论】:
-
“NULL = NULL 返回 FALSE”不正确。
NULL = NULL返回UNKNOWN- SQL 三值逻辑中的 third 真值。要查看您的断言不正确,请尝试NOT (NULL = NULL),您会发现它仍然不匹配。 -
如果您需要比较 7 个数据字段,您的数据库似乎未标准化。
标签: sql postgresql null comparison