这些都是相当基本的陈述。我有一个链接到另一个表中的项目的图形列表。我想检查有多少图形没有使用并且理论上可以删除。
所以首先我使用了 NOT IN 子句:
SELECT [GraphicNr]
,[Graphicfile]
FROM [dbo].[Graphic]
WHERE graphicnr NOT IN (SELECT graphicnr FROM dbo.Komp)
结果为零,这对我来说很奇怪。将其重写为 NOT EXISTS 后,我得到了大约 600 个结果:
SELECT [GraphicNr]
,[Graphicfile]
FROM [dbo].[Graphic] a
WHERE NOT EXISTS (SELECT graphicnr FROM dbo.komp b WHERE a.GraphicNr = b.GraphicNr)
所以我想我真的没有问题,因为第二个语句有效,但根据我的理解,第一个语句不应该给出相同的结果吗?
NOT IN
使用子查询有奇怪的行为。如果子查询中的任何行返回NULL
值,那么no返回行。这是由于遵循严格的语义NULL
(这意味着:“我不知道它们是否相等”)。
NOT EXISTS
行为如您所期望的那样。因此,我建议不要使用NOT IN
与子查询。总是使用NOT EXISTS
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)