我正在尝试执行以下查询。
Select distinct
Case
WHEN S.FileStatusIdentifier = 'Invalid' Then 'Invalid(file<300KB)'
WHEN S.FileStatusIdentifier = 'NotFound' Then 'NotFound'
WHEN F.FileDataOID IS Null THEN 'NoFileData'
END AS FileStatusIdentifier
from FileState S
Inner Join FileData F ON F.FileDataOID = S.FileDataOID
但是当我执行查询时,它给出的结果如下。
FilestatusIdentifier 空值 无效(文件<300KB) 未找到
无论filedataoid为null,它都应将输出表示为'NoFileData'。但是正在获取NULL。有人可以帮助我了解查询的问题吗?
答案 0 :(得分:1)
您没有检查FileStatusIdentifier是否为null。您的行已通过所有这些检查。您上一次对FileDatOID为null的检查将永远不会找到,因为您的内部联接将排除该检查。如果要检查,则内部联接应该是左联接。而且我还要添加
when s.FileStatusIdentifier is null then 'NullIdentifier'
else s.FileStatusIdentifier
end
捕获标识符为null但ID不为null的行。
答案 1 :(得分:0)
这意味着没有一个条件无效。
因此,您可以添加else
。如果所有其他条件评估为 FALSE ,则else_expression
将返回。
Select distinct
Case
WHEN S.FileStatusIdentifier = 'Invalid' Then 'Invalid(file<300KB)'
WHEN S.FileStatusIdentifier = 'NotFound' Then 'NotFound'
WHEN F.FileDataOID IS Null THEN 'NoFileData'
ELSE <else_expression>
END AS FileStatusIdentifier
from FileState S
Inner Join FileData F ON F.FileDataOID = S.FileDataOID