Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于空值导致语句不工作时的SQL不等式_Sql - Fatal编程技术网

由于空值导致语句不工作时的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的乘积

我有一个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的乘积,就像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的变体:谢谢-你是对的-我在错误的地方查找错误-是其他两个字段有时包含空值。谢谢-你是对的-我在错误的地方查找错误-是其他两个字段有时包含空值