我希望以下两个查询会产生相同的结果;但是,我有几个实例,其中第一个为空,而第二个返回数百行。这怎么可能?使用 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)
你忘记了两个选择:
首先,排除连接:
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
值,那肯定可以改变事情。