Sql 无法检索空数据
我有三个字段Category、Date和ID。我需要检索不属于特定ID的数据。以下是我的查询示例:Sql 无法检索空数据,sql,sql-server,Sql,Sql Server,我有三个字段Category、Date和ID。我需要检索不属于特定ID的数据。以下是我的查询示例: SELECT Category, Date, ID FROM table WHERE ID NOT IN('1','2','3') AND Date = '01/06/2015' 运行此查询后,我应该只获取没有任何ID的记录,这意味着空值,因为对于昨天的记录,只有ID 1、2、3存在,其余的没有任何值(空)。出于某种原因,当我运行查询时,它也会删除空值,因此我最终得到0行。这对我来说非常陌生,我
SELECT Category, Date, ID
FROM table
WHERE ID NOT IN('1','2','3')
AND Date = '01/06/2015'
运行此查询后,我应该只获取没有任何ID的记录,这意味着空值,因为对于昨天的记录,只有ID 1、2、3存在,其余的没有任何值(空)。出于某种原因,当我运行查询时,它也会删除空值,因此我最终得到0行。这对我来说非常陌生,我不明白原因是什么。我只知道ID号是字符串值。有什么建议吗?试试这个。空值不能等同于任何其他值
SELECT Category, Date, ID
FROM table
WHERE (ID NOT IN('1','2','3') OR ID IS NULL)
AND Date = '01/06/2015'
试试这个。空值不能等同于任何其他值
SELECT Category, Date, ID
FROM table
WHERE (ID NOT IN('1','2','3') OR ID IS NULL)
AND Date = '01/06/2015'
您确定要将ID字段设置为空吗 下面是您的操作方法:(假设您的其余查询都可以) 如果希望记录没有类别,则需要将查询更改为
SELECT Category, Date, ID
FROM table
WHERE Category IS NULL
AND Date = '01/06/2015'
您确定要将ID字段设置为空吗 下面是您的操作方法:(假设您的其余查询都可以) 如果希望记录没有类别,则需要将查询更改为
SELECT Category, Date, ID
FROM table
WHERE Category IS NULL
AND Date = '01/06/2015'
你有几个选择:
SELECT Category, Date, ID
FROM table
WHERE ISNULL(ID, '4') NOT IN('1','2','3')
AND Date = '01/06/2015'
或者su8898所说的话您有两种选择:
SELECT Category, Date, ID
FROM table
WHERE ISNULL(ID, '4') NOT IN('1','2','3')
AND Date = '01/06/2015'
或者su8898所说的试试这个:
SELECT Category, Date, ID
FROM table
WHERE ID N
AND Date = '01/06/2015'
试试这个:
SELECT Category, Date, ID
FROM table
WHERE ID N
AND Date = '01/06/2015'
其他人已经展示了如何解决这个问题,所以让我试着解释一下为什么会发生这种情况
WHERE ID NOT IN('1','2','3')
相当于
WHERE ID <> '1' AND ID <> '2' AND ID <> '3'
其中ID“1”和ID“2”以及ID“3”
由于NULL anything
产生UNKNOWN,因此表达式产生UNKNOWN,并且不返回相关记录
有关此三元逻辑的详细信息,请参阅以下Wikipedia文章:
- 其他人已经展示了如何解决这个问题,所以让我试着解释一下为什么会发生这种情况
WHERE ID NOT IN('1','2','3')
相当于
WHERE ID <> '1' AND ID <> '2' AND ID <> '3'
其中ID“1”和ID“2”以及ID“3”
由于NULL anything
产生UNKNOWN,因此表达式产生UNKNOWN,并且不返回相关记录
有关此三元逻辑的详细信息,请参阅以下Wikipedia文章:
SELECT Category, Date, ID
FROM table
WHERE ID IS NULL
AND Date = '01/06/2015'
UNION ALL
SELECT Category, Date, ID
FROM table
WHERE ID NOT IN('1','2','3')
AND ID IS NOT NULL
AND Date = '01/06/2015'
请注意,当您使用“IN”或“NOT IN”时,如果列具有空值,则不会获取任何值 在您的情况下,如果您只想获取ID=NULL的记录,那么可以尝试上面建议的解决方案vgSefa 如果您想提取所有带有NULL以及ID不在('1'、'2'、'3')中的记录,那么您可以尝试以下方法
SELECT Category, Date, ID
FROM table
WHERE ID IS NULL
AND Date = '01/06/2015'
UNION ALL
SELECT Category, Date, ID
FROM table
WHERE ID NOT IN('1','2','3')
AND ID IS NOT NULL
AND Date = '01/06/2015'
看一看
使用IS NULL或IS NOT NULL子句测试NULL值。这
可以增加WHERE子句的复杂性。例如,TerritoryID
AdventureWorks2008R2客户表中的列允许空值。
如果SELECT语句要测试除
其他情况下,它必须包含IS NULL子句:
SELECT CustomerID, AccountNumber, TerritoryID
FROM AdventureWorks2008R2.Sales.Customer
WHERE TerritoryID IN (1, 2, 3)
OR TerritoryID IS NULL
如果您确实希望能够直接将值与NULL值进行比较,也可以这样做。这一点在上述文章中也有描述:
Transact-SQL支持允许进行比较的扩展
运算符在与空值进行比较时返回TRUE或FALSE。
通过将ANSI_NULLS设置为OFF可激活此选项
看一看
使用IS NULL或IS NOT NULL子句测试NULL值。这
可以增加WHERE子句的复杂性。例如,TerritoryID
AdventureWorks2008R2客户表中的列允许空值。
如果SELECT语句要测试除
其他情况下,它必须包含IS NULL子句:
SELECT CustomerID, AccountNumber, TerritoryID
FROM AdventureWorks2008R2.Sales.Customer
WHERE TerritoryID IN (1, 2, 3)
OR TerritoryID IS NULL
如果您确实希望能够直接将值与NULL值进行比较,也可以这样做。这一点在上述文章中也有描述:
Transact-SQL支持允许进行比较的扩展
运算符在与空值进行比较时返回TRUE或FALSE。
通过将ANSI_NULLS设置为OFF可激活此选项
为什么不添加
并且ID不是NULL
?ID是主键吗?ID不是主键。如果ID 4存在的话,我希望它将来会出现,所以我的目的不是只获取空值,而是现在剩下的,为什么不添加并且ID不是空的?ID是主键吗?ID不是主键。如果ID=4存在的话,我希望它在将来出现,所以我的目的不仅仅是得到空值,而是现在剩下的,所以让我们假设今天我得到ID=4的记录,它会成为结果的一部分吗。我只是想澄清一下,我不只是想得到空值,我想得到除了ID 1,2,3之外的所有东西,但是由于昨天的数据没有任何其他ID,我留下了空记录。所以今天我得到了ID=4的记录,它会是空值结果的一部分吗。我只是想澄清一下,我不只是想得到空值,我想得到除ID 1、2、3之外的所有信息,但由于昨天的数据没有任何其他ID,我留下了空记录。非常感谢!第二个选项是我想要的:空值加上4,5,6。。太好了,谢谢你!第二个选项是我想要的:空值加上4,5,6。。身份证