如果我的sql中有这样的东西:
SELECT *
FROM SOMETABLE
WHERE ((SELECT ONECOLUMN FROM ANOTHERTABLE WHERE ID = 42) > 0)
如果我在ONECOLUMN
中得到一个NULL,它会大于0吗?
答案 0 :(得分:2)
由于NULL表示“未知”,因此NULL不大于0.它也不小。它不得而知。因此NULL > 0
导致NULL,而不是TRUE或FALSE。
答案 1 :(得分:1)
NULL不大于零。 NULL不等于零。 NULL不小于零。
您可能选择的任何给定整数都将满足这三个条件中的一个。但不是NULL。
NULL不是整数。它是表示不存在值的标记。这可能意味着存在一个值,但是未知。它还可以表明在这种情况下不存在任何价值。
您可以使用ISNULL函数来确定是否存在NULL而不是值。但是如果你将一个值与零进行比较,并且有一个NULL代替该值,那么你将不会得到TRUE或FALSE。
如果你感到困惑,那你就是好公司。
答案 2 :(得分:0)
检查NULL
然后返回0
如果为true,则返回ONECOLUMN
的值:
SELECT *
FROM SOMETABLE
WHERE (
SELECT CASE WHEN ISNULL(ONECOLUMN) THEN 0 ELSE ONECOLUMN END
FROM ANOTHERTABLE
WHERE ID = 42
) > 0
答案 3 :(得分:0)
Null未知,无法与任何值进行比较。它不能更大或更小。
答案 4 :(得分:0)
SELECT *
FROM SOMETABLE
WHERE (
IsNull((SELECT ONECOLUMN
FROM ANOTHERTABLE
WHERE ID = 42), IntValue) > 0
)
如果您需要接受Null
,那么IntValue
可以是1
,否则-1
就可以了。