Sql DB2选择不等于空字符串的位置

Sql DB2选择不等于空字符串的位置,sql,db2,Sql,Db2,我在MYTABLE中有column1char(1),其中所有行都是NULL,下面是我的sql查询: SELECT COLUMN1 FROM MYTABLE WHERE COLUMN1 != 'A' 它不返回任何内容,因为所有行在COLUMN1中都有NULL。我想它应该归还一切。我如何让它工作?我不想用 COALESCE(NULLIF(COLUMN1, ''), '*') 因为这会减慢查询速度。还有其他选择吗?如果你真的想要空值,为什么不呢 SELECT COLUMN1 FROM MYTABL

我在
MYTABLE
中有
column1char(1)
,其中所有行都是
NULL
,下面是我的sql查询:

SELECT COLUMN1 FROM MYTABLE WHERE COLUMN1 != 'A'
它不返回任何内容,因为所有行在
COLUMN1
中都有
NULL
。我想它应该归还一切。我如何让它工作?我不想用

COALESCE(NULLIF(COLUMN1, ''), '*')

因为这会减慢查询速度。还有其他选择吗?

如果你真的想要空值,为什么不呢

SELECT COLUMN1 FROM MYTABLE WHERE (COLUMN1 != 'A' OR COLUMN1 IS NULL)

你的假设是错误的。基本上,所有带有
NULL
的比较运算符都返回“false”或
NULL
(这两个运算符都在
WHERE
子句中过滤掉),除了
为NULL和
非NULL

因此,您的查询应该是:

WHERE column1 <> 'A' OR COLUMN1 IS NULL

思考
NULL
的语义。你可以随心所欲地使用它,但它的意思是“未知”。未知='A'?不。但是未知A'?不。我们根本不知道它是什么,所以几乎所有的比较都会失败

您可以使用
IS NULL
IS NOT NULL
,这两个特殊的操作符设计用于
NULL
。因此,您可以执行以下操作:

SELECT COLUMN1 FROM MYTABLE WHERE COLUMN1 != 'A' OR COLUMN1 IS NULL
但首先问问自己:这是你想要的吗?对于未知值,您是否真的使用了
NULL
?如果你认为它是一个未知的值,它的SQL语义是完全合乎逻辑的,但是它在所有其他情况下都不必要地使所有事情复杂化。基本上,在SQL中引入
NULL
可能是一个错误,因为它在一天内造成的问题比它在关系理论历史上解决的问题还要多

SELECT COLUMN1 FROM MYTABLE WHERE COLUMN1 != 'A' OR COLUMN1 IS NULL