由于空值导致语句不工作时的SQL不等式
我有一个SQL查询,其中包括以下语句由于空值导致语句不工作时的SQL不等式,sql,Sql,我有一个SQL查询,其中包括以下语句 SELECT (CASE WHEN field1 > 0 THEN field1 ELSE (field2 * field3) END) AS result FROM table 它应该返回field1的值,除非该值为“0”,在这种情况下,该语句返回其他两个字段的乘积 我遇到的问题是,如果field1为NULL,则该语句返回NULL 我想修改我的SQL,以便在field1为空时返回字段2和3的乘积
SELECT
(CASE
WHEN field1 > 0 THEN field1
ELSE (field2 * field3)
END) AS result
FROM table
它应该返回field1的值,除非该值为“0”,在这种情况下,该语句返回其他两个字段的乘积
我遇到的问题是,如果field1为NULL,则该语句返回NULL
我想修改我的SQL,以便在field1为空时返回字段2和3的乘积,就像field1为“0”时一样
我尝试了以下方法:
SELECT
(CASE
WHEN field1 > 0 THEN field1
WHEN field1 IS NULL THEN (field2 * field3)
ELSE (field2 * field3)
END) AS result
FROM table
但是NULL似乎仍然贯穿于语句中,并且每当field1为NULL时,都会返回NULL。要帮助您诊断此问题,请使用以下内容:
SELECT
(CASE
WHEN field1 > 0 THEN field1
WHEN field1 IS NULL THEN (field2 * field3)
ELSE (field2 * field3)
END) AS result,
field1, field2, field3
FROM table
WHERE
(CASE
WHEN field1 > 0 THEN field1
WHEN field1 IS NULL THEN (field2 * field3)
ELSE (field2 * field3)
END) IS NULL
问题所在将立即显现。您的查询已经满足了您的要求。当
field1
为NULL
时,它返回产品field2*field3
。如果field2
或field3
中的任何一个为NULL
,则(返回的)产品将为NULL
如果要在其中一个值为NULL
时返回某个值(0
),可以更改大小写
:
SELECT
(CASE
WHEN field1 > 0 -- when field1 > 0
THEN field1
WHEN field2 IS NULL OR field3 IS NULL -- when field1 = 0 or NULL
THEN 0
ELSE field2 * field3
END) AS result
FROM table ;
或者简单地说:
SELECT
(CASE
WHEN field1 > 0
THEN field1
ELSE COALESCE(field2 * field3, 0)
END) AS result
FROM table ;
您可以使用(SQL Server/MySQL)
简单到:
SELECT
COALESCE((CASE
WHEN field1 > 0 THEN field1
ELSE (field2 * field3)
END), 0) AS result
FROM table
首先检查
NULL
。是否确定field2
或field3
不是NULL
?您的查询已经满足您的要求。当field1
为NULL
时,它返回产品field2*field3
。如果field2
或field3
中的任何一个也为NULL
,则(返回的)产品将为NULL
。我刚刚尝试在SQLFiddle上对SQLServer、Oracle、PostgreSQL、MySQL和SQLite数据库运行此选择的变体-它们都支持ypercube所说的。这里是SQLServer的变体:谢谢-你是对的-我在错误的地方查找错误-是其他两个字段有时包含空值。谢谢-你是对的-我在错误的地方查找错误-是其他两个字段有时包含空值