其中Column1=Column1的SQL将只返回非空值

其中Column1=Column1的SQL将只返回非空值,sql,sql-server-2008,where-clause,Sql,Sql Server 2008,Where Clause,我正在研究一个更大的问题,但已经缩小到这个范围,以便让这个问题更容易提问 以下查询: Select * from User where Country = Country 将仅返回国家/地区不为空的行。我希望如果Column1为null,它将返回它,因为null=null 有没有关于为什么这不能像我预期的那样工作的信息 编辑: 我正在尝试这样做: Select * from User where Country = coalesce(@Country, Country) 如果我的变量@Co

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

以下查询:

Select * from User where Country = Country 
将仅返回国家/地区不为空的行。我希望如果Column1为null,它将返回它,因为null=null

有没有关于为什么这不能像我预期的那样工作的信息

编辑:

我正在尝试这样做:

Select * from User where Country = coalesce(@Country, Country)
如果我的变量@Country为null,我希望它能提取所有内容

SQL使用(
true
false
unknown
)和与
NULL
的比较(使用
IS[NOT]NULL
操作符进行测试除外),只要会话选项处于启用状态,则评估为
unknown
NOT
true

对于要从查询返回的行,
WHERE
子句需要计算为
true

在编辑之后,您可以使用

Select * 
from User 
where @Country is null or Country = @Country
option (recompile)
@country为空时返回所有行。虽然可能最好将它们分成两个案例,以避免重新编译惩罚

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

NULL永远不等于NULL,因此当Country为NULL时,Country!=国家

您可以使用IS运算符测试NULL

如果你真的想要空值(我真的不明白为什么你首先想要这样一个查询),那么试试

从用户中选择*,其中IFNULL(国家“”)=IFNULL(国家“”)


select*from User where Country=Country或Country为NULL

正确,NULL不等于NULL,因为两者都未定义,因此无法评估两者是否相等。“NULL永远不等于NULL”--不正确。提示:
分组依据
排序依据
@onedaywhen:您混淆了
不同的
(定义见
SQL:2003 3.1.6.8
)和
相等的
(定义见
SQL:2003 3.1.6.13
)。在
SQL
groupby
groups
中,这些是不同的概念,没有不同的
值。