【发布时间】: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