由于NOT IN查询Access 2013 SQL而无限循环

时间:2018-03-28 21:36:14

标签: vba ms-access-2013

我正在尝试提取另一个表(B)中的1个表(A)中的所有电话号码。我尝试过LEFT OUTER JOIN,但是从来没有停留过很长时间。一旦我转到数据表并返回SQL,它就会回到LEFT JOIN。

那就是说,这是我的代码。

SELECT tblA.[Phone Number]
FROM tblA LEFT JOIN tblB ON tblA.[Phone Number] = tblB.[Wireless Number]
WHERE (((tblA.[Phone Number]) NOT IN (SELECT [Wireless Number] FROM 
[tblB])));

我遇到的问题是,我已经完成了“不在线”,因为无线号码中有“ - ”而电话号码没有。无线数据是我不想修改以便于使用的外部数据。简单地说,我不想修改tblB中的任何内容。

如果某人有一种更简单的方法来查找不在另一张桌子中的价值,那我就是全部的耳朵。这个NOT IN功能正在扼杀我。提前谢谢。

当我运行上面的代码时。访问只是假脱机,没有任何事情发生。它似乎崩溃Access。不确定它在做什么。

1 个答案:

答案 0 :(得分:0)

如果问题是 - 破折号,只需使用Replace删除它们:

SELECT tblA.[Phone Number]
FROM tblA
WHERE tblA.[Phone Number] NOT IN (SELECT Replace([Wireless Number], "-", "") FROM [tblB]);

此外,不需要左连接。 Not In是子查询,因此您无需担心这一点。

如果电话号码可以是Null,或者性能很重要,则Not Exists通常优先于Not In

SELECT tblA.[Phone Number]
FROM tblA
WHERE NOT EXISTS (SELECT 1 FROM [tblB] WHERE Replace(tblB.[Wireless Number], "-", "") =  tblA.[Phone Number]);