在MySQL中使用CASE / WHEN的奇怪行为

时间:2012-11-01 21:23:49

标签: mysql sql phpmyadmin

我正在尝试学习如何在 SQL 中使用 CASE / WHEN ,更具体地说,mySQL。

我有两个表: adhoc_item adhoc_vulnerability ahdoc_item 有一个 adhoc_vulnerability 。现在 adhoc_vulnerability 可能会或可能不会附加一个漏洞(original_vulnerability_id)。

如果没有,那么我想在自己身上返回名称

表格:(或其相关部分)

ADHOC_ITEM enter image description here

ADHOC_VULNERABILITY enter image description here 这是我的问题:

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

这些是结果!

enter image description here

现在我知道这有点复杂,但我已经考虑了大约2个小时,并且没有找到为什么最后项目(具有 adhoc_vulnerability with NULL as original_vulnerability_id )显示当该属性 null时应该精确显示的值!

提前致谢。

1 个答案:

答案 0 :(得分:4)

问题是当ahv.original_vulnerability_idNULL时,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