SQL“EXCEPT”与“WHERE NOT IN”

问题描述 投票:0回答:1

我希望以下两个查询会产生相同的结果;但是,我有几个实例,其中第一个为空,而第二个返回数百行。这怎么可能?使用 T-SQL 在 Azure Synapse 中工作

SELECT [value] FROM table_a
WHERE [value] NOT IN (SELECT [value] FROM table_b)
SELECT [value] FROM table_a
EXCEPT (SELECT [value] FROM table_b)
sql t-sql
1个回答
0
投票

你忘记了两个选择:

首先,排除连接:

SELECT [value]
FROM table_a a
LEFT JOIN table_b b on a.[value] = b.[value]
WHERE b.[value] IS NULL

第二,

NOT EXISTS()

SELECT [value] 
FROM table_a a
WHERE NOT EXISTS(SELECT 1 FROM table_b b WHERE b.[VALUE] = a.[VALUE])

我更喜欢这两个选项,而不是所提供的任何一个选项。但在这四个选项中,最后一个选项,使用

NOT EXISTS()
往往 表现更好。当然,您还应该测试,看看什么最适合您的数据和索引。

但至于为什么结果不同......我希望进行

NULL
比较,因为
NULL
与自身相比仍然是 false ,否则会混淆某些比较操作。如果
table_b
可以有
NULL
值,那肯定可以改变事情。

© www.soinside.com 2019 - 2024. All rights reserved.