2011-03-09 52 views
1

我有一个运行良好的查询,然后我想添加到现有的where条件是这样的:! 和some_column = 1个=在MySQL没有工作,我希望

这列值为空。但查询停止查找它用来查找的行。任何想法为什么?

谢谢。 亚历

+1

什么是您查询是什么样子? – BoltClock 2011-03-09 06:04:36

回答

2

SQL是臭名昭著其比较处理空值的。如果列可以为空,你想这样做就可以了比较,你应该使用ISNULL:

WHERE ISNULL(column_name, -1) != 0 

这应该照顾你的问题。

+1

我认为'(column_name为null或column_name!= 1)'会更直观,可能会运行得更快。 – Malvolio 2011-03-09 06:10:24

+0

@Malvolio - 在性能方面,如果有任何差异,将会有微不足道的差异。更直观的,我不这么认为,但那纯粹是主观的。我认为更少的代码比更多的代码更直观,并且我看到很多真正无法正确理解SQL中的OR的人。 – 2011-03-09 06:13:48

+0

@Malvolio你的想法奏效了! :) – Genadinik 2011-03-09 06:19:30

0

使用“<>可能工作...可以给试图在几乎所有形式

where ISNULL(coloumn_name,1) <> 1 
+0

但是'<>'和'!='是一样的...... – BoltClock 2011-03-09 06:07:48

+0

不行,不行。 – Malvolio 2011-03-09 06:11:04

+0

好的,更新some..plz检查...和处理NULL值SQL总是凌乱 – 2011-03-09 06:14:53

2

几乎所有null表达式都为null。 1 != null是UNKNOWN(因此会导致该行从结果集中删除)。 1 = null是未知。 1 + null是未知。

最重要的异常:null is null为TRUE。

+0

但'空=空'评估为假 – nzifnab 2011-03-09 06:12:03

+0

它当然会。使用'is'。 – Malvolio 2011-03-09 06:13:43

+0

我知道我只是显示了'null'的奇怪 – nzifnab 2011-03-09 06:22:03

1

根据定义,NULL为“未知值”...因此,null!= 1是未知结果。 NULL 可能为为1,它可能不是 - 但关键是SQL不会尝试猜测。这是SQL处理值的一种奇怪的方式,但它就是这样。

因此,如果你想占你需要你的地方改成这样可能空:

AND some_column != 1 AND some_column IS NOT NULL