我创建了一些查询,无法理解为什么结果不符合我的预期。在SQL中使用NOT谓词
我不明白为什么查询II和III不会返回相同的结果。我希望查询II能够返回未由查询I选择的所有行。
我本来料想到查询II和III会给出相同的结果。在我看来,III的结果是正确的。
我敢肯定我错过了什么,我只是不知道该怎么做。
的例子:
表:
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
查询:
所有记录: SELECT * FROM TestTable的
一,选择查询:
select * from TestTable
where (ValueA = 10 or ValueA = 20) AND ValueB = 5
结果:
TestTableId ValueA ValueB
1 10 5
2 20 5
II。同样的查询,但为NOT
select * from TestTable
where NOT ((ValueA = 10 or ValueA = 20) AND ValueB = 5)
结果:
TestTableId ValueA ValueB
5 NULL 10
6 10 NULL
III。同样的查询作为第二(我想)
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 = 5”的计算结果为“UNKNOWN”(而不是“no”)。 – onedaywhen 2010-11-18 15:26:59
我当时有点隐喻。重点是ValueB为NULL的行将被排除在外。 – BradC 2010-11-18 16:49:19
@onedaywhen - 根据您的评论编辑我的文章,以稍微更精确。 – BradC 2010-11-18 19:02:46