SQL其中Column1 = Column1将仅返回非空值

时间:2011-10-29 17:57:46

标签: sql sql-server-2008 where-clause

我正在研究一个更大的问题,但已将其缩小到这个范围,以便更容易提出这个问题。

以下查询:

Select * from User where Country = Country 

仅返回Country不为null的行。我希望如果Column1为null,它将返回它,因为NULL = NULL。

关于为什么这不符合预期的任何输入?

编辑:

我正在尝试这样做:

Select * from User where Country = coalesce(@Country, Country)

如果我的变量@Country为null,我希望它能拉出所有内容。

2 个答案:

答案 0 :(得分:5)

SQL使用three valued logictruefalseunknown)并与NULL进行比较(使用IS [NOT] NULL运算符进行测试除外)只要会话选项ANSI_NULLS已启用,评估为unknown而非true

要从查询中返回一行,WHERE子句需要评估为true

编辑后,您可以使用

Select * 
from User 
where @Country is null or Country = @Country
option (recompile)

@country is null时返回所有行。虽然最好将这些分解为2个案例以避免重新编译惩罚。

IF @Country is null
Select * 
from User 
ELSE
Select * 
from User 
Where Country = @Country

答案 1 :(得分:1)

NULL永远不会等于NULL,所以当Country为NULL时,Country!= Country

使用IS运算符测试NULL。

如果你真的想要NULLS(我真的不明白为什么你;首先想要这样的查询),那就试试..

select * from User where IFNULL(Country, '') = IFNULL(Country, '')

select * from User where Country = Country or Country IS NULL