Sql server 使用!=在SQL中
我有表Sql server 使用!=在SQL中,sql-server,Sql Server,我有表作业: CREATE TABLE [dbo].[Jobs] ( [Id] [int] IDENTITY(1,1) NOT NULL, [ClientId] [int] NOT NULL, [JobType] [int] NOT NULL, [Priority] [int] NOT NULL, [Done] [smallint] NULL ) ON [PRIMARY] 并在其中记录: Id ClientId JobType Priority
作业
:
CREATE TABLE [dbo].[Jobs]
(
[Id] [int] IDENTITY(1,1) NOT NULL,
[ClientId] [int] NOT NULL,
[JobType] [int] NOT NULL,
[Priority] [int] NOT NULL,
[Done] [smallint] NULL
) ON [PRIMARY]
并在其中记录:
Id ClientId JobType Priority Done
-----------------------------------------
1 41 1 1 NULL
为什么这个问题
SELECT JobType
FROM Jobs
WHERE Done != 1
AND ClientId = 41
不返回任何内容?因为
NULL
值是未知值
必须使用NULL
和notnull
谓词来比较可空值。这应该起作用:
SELECT JobType
from Jobs
where (Done != 1 OR Done IS NULL)
and ClientId=41
NULL没有任何类型。一事无成。所以不能将某个值与NULL进行比较。在大多数DBMS上,即使是
NULL=NULL
也会返回FALSE(我知道外部也有一些,但执行方式不同)。为了防止这种情况,可以在where子句中使用诸如IS NULL
或IS NOT NUL
L之类的结构。。基于此,您的查询应该如下所示:
SELECT "JobType" FROM "Jobs" WHERE "Done" IS NULL
如果Done
可以有多个值,您可以使用
SELECT "JobType"
FROM "Jobs"
WHERE
"Done" IS NULL OR
"Done" <> 1
选择“作业类型”
来自“乔布斯”
哪里
“Done”为NULL或
“完成”1
甚至
=
有效,
是我所说的不平等的更符合SQL的方式。在SQL
SELECT JobType FROM Jobs
WHERE ISNULL(Done, 0) <> 1 AND ClientId = 41
从作业中选择作业类型
其中ISNULL(Done,0)1和ClientId=41
使用where Done为NULL
您可以尝试where ISNULL(Done,0)!=1和ClientId=41
NULL
在SQL中有点棘手。。。。您无法使用常规比较运算符对其进行比较-只有为NULL
或不为NULL
才会进行比较work@marc_s:同意可能没有关于Done
的索引,但由于ISNULL阻止DB引擎进行大多数优化,当表达式要应用一个条件时,我总是避免这样做。@iDevlop:同意-但在这里,如果不能只使用Done is NOT NULL
或诸如此类的话,可能需要这样做……但是Done可能是NULL和“0”(可能还有任何其他值),我需要精确的=1@vico-查看我的更新aswer,使用(完成!=1或完成为空)