Access 2013 SQL中NOT IN查询引发无限循环问题求助
解决从表A提取未出现在表B中的电话号码问题
嘿,我明白你遇到的困扰了!先给你理清几个关键点,再给你靠谱的解决方案:
关于LEFT OUTER JOIN自动变成LEFT JOIN的问题
不用慌,这是Access的正常行为——在Access SQL里,LEFT JOIN和LEFT OUTER JOIN是完全等价的,Access只是自动帮你简化了写法,不影响查询功能,你不用纠结这个差异。
为什么你的NOT IN查询会出问题?
你的当前查询用了NOT IN子查询,但如果tblB.[Wireless Number]字段存在NULL值,这个查询就会返回空结果!因为SQL中任何值和NULL比较都会得到UNKNOWN,整个NOT IN条件会直接失效。这应该就是你遇到“更多问题”的核心原因。
更可靠的LEFT JOIN写法
用LEFT JOIN配合IS NULL的写法,能完美避开NULL的坑,而且效率通常也更高,写法如下:
SELECT tblA.[Phone Number] FROM tblA LEFT JOIN tblB ON tblA.[Phone Number] = tblB.[Wireless Number] WHERE tblB.[Wireless Number] IS NULL;
这个查询的逻辑是:
LEFT JOIN会保留tblA里的所有记录,不管tblB有没有匹配的电话号码WHERE tblB.[Wireless Number] IS NULL筛选出那些在tblB里完全找不到匹配的记录,也就是你要的“未出现在表B中的电话号码”
额外提示
如果tblA里存在重复的电话号码,需要去重的话,可以加上DISTINCT:
SELECT DISTINCT tblA.[Phone Number] FROM tblA LEFT JOIN tblB ON tblA.[Phone Number] = tblB.[Wireless Number] WHERE tblB.[Wireless Number] IS NULL;
内容的提问来源于stack exchange,提问作者D. Steel
相关产品推荐
相关产品推荐

