比较字段以查找非匹配项

时间:2013-12-09 15:28:16

标签: sql ms-access ms-access-2007

SELECT Left([PTC Import].[ZipCode],5) AS Expr1, [PTC Import].[Country], [ZipCodeDatabase_STANDARD].[ZipCode]
FROM [PTC Import] 
LEFT JOIN [ZipCodeDatabase_STANDARD].[ZipCode] ON Expr1 = [ZipCodeDatabase_STANDARD].[ZipCode]
WHERE ((([ZipCodeDatabase_STANDARD].[ZipCode]) Is Null) AND (([PTC Import].[Country])="USA"
FROM [PTC Import], ZipCodeDatabase_STANDARD;

好的,我在这里尝试将ZipCode字段与我的ZipCode数据库进行比较以验证并确保它实际上是一个有效的邮政编码。我希望此查询显示与该国家/地区为美国的有效邮政编码不匹配的任何记录。

我目前在JOIN语句错误消息中收到语法错误。

我有从另一个Access数据库链接的ZipCode数据库,如果这会影响任何事情。

2 个答案:

答案 0 :(得分:3)

最后一行

FROM [PTC Import], ZipCodeDatabase_STANDARD;

不应该在那里。我认为你有一个内部联接,忘了删除它:

然后,在[ZipCodeDatabase_STANDARD]的LEFT JOIN中出现错误,您正在使用在FROM中定义的别名。您应该使用Left(i。[ZipCode],5),因为别名尚未定义。

此外,我为每个表添加了一个别名,以便于阅读。

应该是:

SELECT Left(i.[ZipCode],5) AS Expr1, 
       i.[Country], 
       zs.[ZipCode]
FROM [PTC Import] i 
LEFT JOIN [ZipCodeDatabase_STANDARD] zs ON Left(i.[ZipCode],5) = zs.[ZipCode]
WHERE zs.[ZipCode] Is Null AND i.[Country])="USA";

答案 1 :(得分:2)

您的LEFT JOIN似乎正在尝试加入包含字段的表格。

FROM [PTC Import] 
LEFT JOIN [ZipCodeDatabase_STANDARD].[ZipCode]

将表格加入另一个表格。也许这就是你需要的。

FROM [PTC Import] 
LEFT JOIN [ZipCodeDatabase_STANDARD]

对于join的ON子句,我想你想......

ON [PTC Import].[ZipCode] = [ZipCodeDatabase_STANDARD].[ZipCode]

然后删除第二个FROM子句。

如果您有Access'查询设计器可用,请使用它来创建查询。至少从设计器设置连接,因为它知道如何创建保持数据库引擎满意的连接。