Bry*_*yan 5 sql vba ms-access-2007 not-exists
我有3个表:NotHeard,分析,分析2.在每个表中,我有两列名为UnitID和Address.
我现在要做的是选择未显示在分析或分析2中的UnitID和Notheeard地址列的所有记录.我创建的SQL语句如下:
SELECT UnitID, Address
INTO [NotHeardByEither]
FROM [NotHeard]
Where NOT EXISTS( Select analyzed.UnitID FROM analyzed WHERE [NotHeard].UnitID = analyzed.UnitID)
or NOT EXISTS( Select analyzed2.UnitID FROM analyzed2 WHERE [NotHeard].UnitID = analyzed2.UnitID)
Group BY UnitID, Address
Run Code Online (Sandbox Code Playgroud)
我认为这样可行,因为我使用了单个NOT EXISTS子查询行,它在过去对我来说效果很好.然而,上面的查询返回NotHeard表中的相同数据,而如果我取出或NOT EXISTS部分它可以正常工作.
关于我做错了什么或如何做我想做的事情的任何想法?
关于你的原始查询,试试吧
NOT (
EXISTS(
Select analyzed.UnitID FROM analyzed WHERE [NotHeard].UnitID = analyzed.UnitID)
AND EXISTS(
Select analyzed2.UnitID FROM analyzed2 WHERE [NotHeard].UnitID = analyzed2.UnitID)
)
Run Code Online (Sandbox Code Playgroud)
这意味着没有.但这与你原来的相同(在样本数据上测试).你确定你不是不是在B中也不是A吗?那就是
NOT (
EXISTS(
Select analyzed.UnitID FROM analyzed WHERE [NotHeard].UnitID = analyzed.UnitID)
OR EXISTS(
Select analyzed2.UnitID FROM analyzed2 WHERE [NotHeard].UnitID = analyzed2.UnitID)
)
Run Code Online (Sandbox Code Playgroud)
要意识到EXISTS解决方案正在使用可能比LEFT JOIN和NULL更差的相关子查询,这是一个示例.
SELECT NotHeard.UnitID, NotHeard.Address
FROM (NotHeard LEFT JOIN analyzed ON NotHeard.UnitID = analyzed.UnitID)
LEFT JOIN analyzed2 ON NotHeard.UnitID = analyzed2.UnitID
WHERE analyzed.UnitID Is Null OR analyzed2.UnitID Is Null
GROUP BY NotHeard.UnitID, NotHeard.Address;
Run Code Online (Sandbox Code Playgroud)
请注意,与Austin的解决方案相比,我在条件中使用了OR,并且在分析和分析中都不会给你.