我有表Jobs
:
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
什么都不回来?
答案 0 :(得分:1)
因为NULL
值是未知值。
您必须使用NULL
和NOT NULL
谓词来比较可空值。这应该有效:
SELECT JobType
from Jobs
where (Done != 1 OR Done IS NULL)
and ClientId=41
答案 1 :(得分:1)
SQL
null <> null
。
当Done为null时,ISNULL在这里使用指定的值(0)。
SELECT JobType FROM Jobs
WHERE ISNULL(Done, 0) <> 1 AND ClientId = 41
答案 2 :(得分:0)
NULL没有任何类型。没有什么是没有的。所以你无法将某些东西与NULL进行比较。甚至NULL = NULL
在大多数DBMS上都会返回FALSE(我知道有一些是外部的,不同的做法)。为了防止出现这种情况,您可以使用IS NULL
或IS NOT NUL
L这样的结构。在你的where子句中。基于此,你的查询应该类似于:
SELECT "JobType" FROM "Jobs" WHERE "Done" IS NULL
如果Done
可以有多个值,您可以使用类似
SELECT "JobType"
FROM "Jobs"
WHERE
"Done" IS NULL OR
"Done" <> 1
即使!=
工作,<>
也是更多的SQL方式恕我直言。