其中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
NOTtrue
对于要从查询返回的行,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中,这些是不同的概念,没有不同的值。