【问题标题】:"JOIN expression not supported" in Access, how to edit queryAccess中的“不支持JOIN表达式”,如何编辑查询
【发布时间】:2016-12-19 14:37:30
【问题描述】:

我在 Access 2010 数据库中有一个查询,大致如下:

select * from (table1 inner join table2 on table1.city = table2.code)
   inner join table3 on table3.col1 = table2.col1 and table3.col2 = table2.col2;

该查询用于报表,效果很好(我可以运行报表并获取数据)。但是,当我尝试打开查询(在数据表或设计视图中)时,我得到 JOIN expression not supported

我知道这意味着什么——嵌套的 JOIN 以及长 ON 条件需要放在括号中。以下将起作用:

select * from (table1 inner join table2 on table1.city = table2.code)
   inner join table3 on (table3.col1 = table2.col1 and table3.col2 = table2.col2);

现在有一个问题:当我保存查询并稍后打开它时,Access 再次删除了括号。结果,我再次遇到同样的错误。 Access GUI 不提供直接在 SQL 视图中打开查询的方法,并且在设计或数据表视图中打开它会在我有机会修复 SQL 代码之前给出错误。 (在数据表视图中,数据显示,错误对话框出现在其顶部,并在单击确定后立即关闭。)

在这种情况下如何获取查询的 SQL 代码?

【问题讨论】:

  • 尝试将您的子查询保存为独立的独立查询,并在您的“更高级别”查询中使用这些查询。
  • 我的查询设计器为 2 列的连接生成了这个,试试这个:inner join table3 on (table3.col1 = table2.col1) and (table3.col2 = table2.col2)(每个连接列集周围的括号)。但是AFAIK不需要整个ON子句周围的括号。 -- 有理由不使用查询设计器吗?
  • 一切顺利,但由于错误,我无法更改查询—我的问题是关于获取 SQL 代码的解决方法。我终于找到了解决方案(见下文)。修复 SQL 代码本身非常容易——结果是我的第二个 JOIN 子句以 ON table3.col1 = table2.col1 AND table3.col2 = 'value' 结尾,可以很容易地重写为 ON table3.col1 = table2.col1 WHERE table3.col2 = 'value'

标签: ms-access


【解决方案1】:

一个用于提取查询的 SQL 代码的 VBA 宏显示在here

首先,创建一个 VBA 模块。在模块中,创建以下子:

Public Sub printBrokenQuery()
    Debug.Print CurrentDb().QueryDefs("BrokenQuery").SQL
End Sub

按 Ctrl+G 调出即时窗口(显示调试输出)。然后通过将光标放在源代码中并按 F5 来运行上面的 sub。

现在创建另一个子:

Public Sub setBrokenQuery()
    CurrentDb().QueryDefs("Broken").SQL = _
    "(your query here)"
End Sub

获取查询的源代码并找出解决方法(对此有一些答案)。最后,将 SQL 代码粘贴到新的子目录中,上面写着(your query here)。将光标放在该子上并运行它。瞧——问题解决了。修复错误后,即可删除 VBA 模块。

【讨论】:

    猜你喜欢
    • 2014-04-23
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多