我的桌子下面有一列reference
。它包含NULL
,0
和1
作为其值。我想要排除包含0
的行。另外,我希望显示带有NULL
值的行。我尝试了reference != 0
,但它也排除了NULL
值的行。我该如何预防?
答案 0 :(得分:4)
SELECT reference FROM yourTable WHERE reference = 1 OR reference IS NULL;
这将只返回您想要的值
答案 1 :(得分:2)
NULLS
是一个棘手的野兽 - 您无法将null与0进行比较,因此null != 0
始终返回unknown,在您的情况下将其视为FALSE
。相反,您可以在语句中指定空值:
... WHERE reference IS NULL OR reference != 0
或者您可以使用评估中的其他值替换null:
... WHERE COALESCE(reference, 2) != 0
答案 2 :(得分:0)
数据库中的NULL表示缺少值,这意味着如果与null进行比较,结果始终是未知的。
数据库因此遵循三元逻辑或三值逻辑3VL,因此SQL中的逻辑表达式导致True,false和Unknown。所以当你要求reference != 0
时,不会返回NULL,因为它们被评估为UNKNOWN而不是TRUE
要回答您的问题,您需要包括两项检查,即
select reference from tablename where reference is null or reference = 1
在数据库中搜索三值逻辑或在数据库中搜索NULL处理以获取更多信息
答案 3 :(得分:0)
使用NULL
保存比较。在MySQL中,这是<=>
的相等性。所以,你可以这样做:
where not (reference <=> 0)
在标准SQL中,这将是:
where reference is distinct from 0