在SQL中使用!=

时间:2014-12-09 08:22:21

标签: sql-server

我有表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

什么都不回来?

3 个答案:

答案 0 :(得分:1)

因为NULL值是未知值。

您必须使用NULLNOT 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 NULLIS 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方式恕我直言。