我正在尝试学习如何在 SQL 中使用 CASE / WHEN ,更具体地说,mySQL。
我有两个表: adhoc_item 和 adhoc_vulnerability 。 ahdoc_item 有一个 adhoc_vulnerability 。现在 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 < strong> with NULL as original_vulnerability_id )显示当该属性不 null时应该精确显示的值!
提前致谢。
答案 0 :(得分:4)
问题是当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 NAME