gpt4 book ai didi

sql - 在SQL中使用NOT谓词

转载 作者:行者123 更新时间:2023-12-04 18:15:39 24 4
gpt4 key购买 nike

我创建了一些查询,但不明白为什么结果不如我预期。

我不明白为什么查询II和III不返回相同的结果。我希望查询II返回查询I未选择的所有行。

我希望查询II和III会给出相同的结果。我认为III的结果是正确的。

我确定我错过了一些东西,我只是不知道什么。

这个例子:

table :

CREATE TABLE [dbo].[TestTable](
[TestTableId] [int] NOT NULL,
[ValueA] [int] NULL,
[ValueB] [int] NULL
) ON [PRIMARY]

数据:
TestTableId ValueA ValueB
1 10 5
2 20 5
3 10 NULL
4 20 NULL
5 NULL 10
6 10 10
7 NULL NULL

查询:

所有记录:
从TestTable中选择*

一,选择查询:
select * from TestTable 
where (ValueA = 10 or ValueA = 20) AND ValueB = 5

结果:
TestTableId ValueA ValueB
1 10 5
2 20 5

二。相同的查询,但不是
select * from TestTable 
where NOT ((ValueA = 10 or ValueA = 20) AND ValueB = 5)

结果:
TestTableId ValueA ValueB
5 NULL 10
6 10 NULL

三,与第二个查询相同(我认为)
select * from TestTable where TestTable.TestTableId not in 
(select TestTableId from TestTable
where (ValueA = 10 or ValueA = 20) AND ValueB = 5)

结果:
TestTableId ValueA ValueB
3 10 NULL
4 20 NULL
5 NULL 10
6 10 10
7 NULL NULL

最佳答案

NULL是有趣的生物。他们将对以下两个问题回答“我不知道”:

Are you 5?  (... WHERE ValueB = 5)


Are you Not 5? (... WHERE NOT ValueB = 5)

如您所见,这导致两个查询都排除了NULL值。

您必须以明确考虑NULL的方式提出问题:
... WHERE (ValueB IS NULL OR NOT ValueB = 5) ...

关于sql - 在SQL中使用NOT谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4215519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com