【问题标题】:Comparing fields to find none matches比较字段以查找无匹配项
【发布时间】:2013-12-09 15:28:15
【问题描述】:
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 数据库。

【问题讨论】:

  • “JOIN 操作中的语法错误”是我收到的消息
  • 啊,最后一行你不再需要了,我相信下面已经回答了

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


【解决方案1】:

最后一行

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";

【讨论】:

  • 我没有语法错误,但即使邮政编码无效,我也没有显示记录
  • 我不是 100% 确定我理解,但请尝试将 zs.[ZipCode] Is Null 添加到 ON 子句而不是 WHERE。
  • 相同。仍然没有显示带有无效邮政编码的记录,而这些记录我使测试无效。
  • 尝试在sqlfiddle 中添加表结构和一些示例数据,看看我是否可以进一步帮助您
【解决方案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 查询设计器,请使用它来创建您的查询。至少从设计者那里设置连接,因为它知道如何创建让数据库引擎满意的连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    相关资源
    最近更新 更多