SQL Case语句返回true,但应该为false

时间:2011-04-04 16:48:39

标签: sql

我有一个类似这样的SQL语句

SELECT t1.*
    CASE 
        WHEN t1.COL1 = 0 THEN 0
        WHEN 
            (t1.COL2 = 'val' OR t1.COL3 = 'val' etc) AND ((SELECT COUNT(*) FROM t1 WHERE etc...) > 0)
        THEN Run same sub query
        WHEN 
            something else
        THEN defaultvalue
    END as brokencase

现在,上面的第二个WHEN语句,当单独运行时,返回零。但是当它在这里运行时,我得到一堆空值,因为该语句以某种方式返回true。

那么为什么count语句返回零,但WHEN语句认为它是真的?出于隐私原因,我在这里遗漏了很多细节,但这是一般性问题。

2 个答案:

答案 0 :(得分:1)

通常当我看到这个时,程序员在他们的语句中缺少ELSE或DEFAULT案例。要找出您没有捕获的场景,请设置如下选项:

SELECT DISTINCT columnTested1,columnTested2,columnTestedX,case语句 从blah

显示所有正在测试的列,然后是您的情况,您将在结果中看到的是导致您的NULL的列的组合。您需要在案例陈述中捕获这些内容,否则您将继续错过这些选项

在不同选项中测试不同的列时,可能需要多个else语句来捕获它们。一旦确定了导致问​​题的列组合,就很难修复case语句。

答案 1 :(得分:1)

如果要排除具有空值的结果,则必须确保在WHEN条件下检查结果。您尚未在计数查询中指定WHERE子句,因此我无法确定这是否是问题所在。它看起来像这样:

SELECT COUNT(*) FROM t1 WHERE ExcludeValue IS NOT NULL
相关问题