MS Access SQL正在删除查询中的括号

问题描述:

我有这个查询,它工作正常。当我打开创建查询并在窗口中复制/粘贴SQL时,它运行良好,我可以编辑表单编号并保存查询。在关闭查询并在设计视图中再次打开它之后,括号全部消失,并且当我尝试更改任何内容或保存它时,我得到不支持的联接表达式。查询无论如何运行,结果都是正确的。我能做些什么来保持查询不被这样改变?为什么删除括号?MS Access SQL正在删除查询中的括号

SELECT DISTINCT 
A01.ID, 
A01.Symbol, 
A01.Number, 
A01.Module, 
A02.Form as FormHE3, 
MAX (A02.Sequence) as FormSeq 
INTO [CodesAndFormsResults] 
FROM 
(01_PreviousTable A01 
left outer join tbl_PolForms A02 ON (A02.ID = A01.ID 
and A02.Form = 'HE3')) 
GROUP BY 
A02.Form, 
A01.ID, 
A01.Symbol, 
A01.Number, 
A01.Module 
ORDER BY 
A01.Number,A01.Symbol,A01.Module; 

圆括号正在被删除,因为它们是不必要的。 MS Access在保存之前总是尝试简化查询。有时你可以诱使MS Access离开它,但它通常会使你的查询更加复杂和脆弱。

查询解析器抱怨(“不支持加入语法”),因为它无法直观地显示查询。当你指定一个条件连接时,这总是会发生。真的没有问题。您只需将查询编辑为SQL,而不是通过设计器。

+0

号如果使用过滤器的连接标准的一部分,它包括整个左表(A01),只有行从符合标准的权利(A02)。但是,如果该相同的筛选器位于WHERE子句中,则会失去使用LEFT JOIN的目的。两者产生非常不同的结果。 – tgolisch

  1. SELECT DISTINCTGROUP BY查询中是多余的;摆脱DISTINCT
  2. 丢弃INTO [CodesAndFormsResults]而您专注于构建一个简单的SELECT查询,该查询返回所需内容以及哪个Access的查询设计器不会损坏。您可以稍后添加INTO [CodesAndFormsResults],但现在只限于尽可能使用最简单的查询。
  3. 将子句中的移动到基于tbl_PolForms的子查询中的WHERE子句。
SELECT 
    A01.ID, 
    A01.Symbol, 
    A01.Number, 
    A01.Module, 
    A02.Form AS FormHE3, 
    MAX(A02.Sequence) AS FormSeq 
FROM 
    [01_PreviousTable] AS A01 
    LEFT JOIN 
    (
     SELECT t.ID, t.Sequence, t.Form 
     FROM tbl_PolForms AS t 
     WHERE t.Form = 'HE3' 
    ) AS A02 
    ON A01.ID = A02.ID 
GROUP BY 
    A02.Form, 
    A01.ID, 
    A01.Symbol, 
    A01.Number, 
    A01.Module 
ORDER BY 
    A01.Number, 
    A01.Symbol, 
    A01.Module; 
+0

这是工作,谢谢。我将如何添加另一个左连接?每一种我尝试的方式我都会得到语法错误(缺少运算符)。我的第一次尝试看起来像这样。 – Tracy

+0

FROM 01_PreviousTable AS A01 LEFT JOIN (SELECT pf.ID,pf.Sequence,pf.Form \t FROM tbl_PolForms由于PF \t WHERE pf.FormNumber在( 'HE3'))AS A02 \t ON A01。 ID = A02.ID LEFT JOIN (SELECT ex.UseCode,ex.Line1,ex.Line2 \t tbl_PropExt为当然 \t WHERE ex.UseCode在( 'H315'))AS A03 \t ON A01.ID = A03.ID – Tracy

+0

对不起,我刚刚注意到我在第二个select语句中错过了FROM。尽管如此,它并没有什么不同。 FROM 01_PreviousTable AS A01 LEFT JOIN (SELECT pf.ID,pf.Sequence,pf.Form \t FROM tbl_PolForms由于PF \t WHERE pf.Form在( 'HO04', 'HO23'))AS A02 \t ON A01.ID = A02.ID LEFT JOIN (SELECT ex.UseCode,ex.Line1,ex.Line2 \t FROM tbl_PolExt为当然 \t WHERE离。('H315')中的UseCode)AS A03 \t ON A01.PolicyID = A03.PolicyID – Tracy