我正在尝试学习如何在SQL中更具体地学习如何使用CASE/WHEN,即mySQL。
我有两张桌子:adhoc_item和adhoc_itemadhoc_vulnerability ahdoc_item与之相关。现在,adhoc_vulnerability可能有也可能没有附加一个漏洞(original_vulnerability_id)。
如果没有,那么我想返回名称本身。
表:(或其相关部分)
ADHOC_ITEM

ADHOC_VULNERABILITY

这是我的疑问:
SELECT adi.name as item, CASE ahv.original_vulnerability_id
WHEN ISNULL(ahv.original_vulnerability_id) THEN ahv.name
ELSE 'foo'
END NAME
FROM adhoc_item adi
JOIN adhoc_vulnerability ahv ON ahv.id = adi.adhoc_vulnerability_id和这些是结果!

现在,我知道这有点复杂,但我已经考虑了大约2个小时,没有找到解释为什么最后一个adhoc_vulnerability条目(它有一个带有null的,因为original_vulnerability_id)显示了当该属性不是NULL时应该出现的值!
提前谢谢。
发布于 2012-11-01 21:31:50
问题是,当ahv.original_vulnerability_id是NULL时,ISNULL()函数返回TRUE (即MySQL与1相同,但这与此无关)。因此,不是将列与NULL进行比较,而是将其与TRUE进行比较。
将CASE表示重写为:
CASE
WHEN ISNULL(ahv.original_vulnerability_id) THEN ahv.name
ELSE 'foo'
END NAME或作为:
CASE
WHEN ahv.original_vulnerability_id IS NULL THEN ahv.name
ELSE 'foo'
END NAMEhttps://stackoverflow.com/questions/13185683
复制相似问题