使用 UNION ALL 查询在 FROM 子句中出现语法错误
Posted
技术标签:
【中文标题】使用 UNION ALL 查询在 FROM 子句中出现语法错误【英文标题】:Getting a Syntax error in FROM clause with UNION ALL query 【发布时间】:2019-11-24 08:23:40 【问题描述】:我有一个 Union All 查询,我目前正在从中运行生成表查询。我试图将它们合并为一件事,并让联合所有查询也只是制作表格。我在这里动态学习,任何人都在尝试 INTO 方法,我可以将其作为一个生成表来工作,但是一旦我添加 UNION ALL,我就会得到语法错误。
对我做错的任何帮助将不胜感激。
SELECT *
INTO tbl_Test
FROM
(SELECT
qry_BomLevel1_PartNo.Type, qry_BomLevel1_PartNo.PartNo,
qry_BomLevel1_Desc.Description, qry_BomLevel1_Rev.Revision,
qry_BomLevel1_PartNo.Qty, qry_BomLevel1_Comment.Comment
FROM
qry_BomLevel1_PartNo
LEFT JOIN
((qry_BomLevel1_Desc
LEFT JOIN
qry_BomLevel1_Rev ON (qry_BomLevel1_Desc.XRefConfigurationID = qry_BomLevel1_Rev.XRefConfigurationID)
AND (qry_BomLevel1_Desc.ChildRevNr = qry_BomLevel1_Rev.ChildRevNr)
AND (qry_BomLevel1_Desc.ChildID = qry_BomLevel1_Rev.ChildID))
LEFT JOIN
qry_BomLevel1_Comment ON (qry_BomLevel1_Rev.XRefConfigurationID = qry_BomLevel1_Comment.XRefConfigurationID)
AND (qry_BomLevel1_Rev.ChildRevNr = qry_BomLevel1_Comment.ChildRevNr)
AND (qry_BomLevel1_Rev.ChildID = qry_BomLevel1_Comment.ChildID))
ON (qry_BomLevel1_PartNo.XRefConfigurationID = qry_BomLevel1_Desc.XRefConfigurationID)
AND (qry_BomLevel1_PartNo.ChildRevNr = qry_BomLevel1_Desc.ChildRevNr)
AND (qry_BomLevel1_PartNo.ChildID = qry_BomLevel1_Desc.ChildID)
UNION ALL
SELECT
qry_BomLevel2_PartNo.Type, qry_BomLevel2_PartNo.PartNo,
qry_BomLevel2_Desc.Description, qry_BomLevel2_Rev.Revision,
qry_BomLevel2_PartNo.Qty, qry_BomLevel2_Comment.Comment
FROM
qry_BomLevel2_PartNo
LEFT JOIN
((qry_BomLevel2_Desc
LEFT JOIN
qry_BomLevel2_Rev ON (qry_BomLevel2_Desc.ChildID = qry_BomLevel2_Rev.ChildID)
AND (qry_BomLevel2_Desc.ChildRevNr = qry_BomLevel2_Rev.ChildRevNr)
AND (qry_BomLevel2_Desc.XRefConfigurationID = qry_BomLevel2_Rev.XRefConfigurationID))
LEFT JOIN
qry_BomLevel2_Comment ON (qry_BomLevel2_Rev.ChildID = qry_BomLevel2_Comment.ChildID)
AND (qry_BomLevel2_Rev.ChildRevNr = qry_BomLevel2_Comment.ChildRevNr)
AND (qry_BomLevel2_Rev.XRefConfigurationID = qry_BomLevel2_Comment.XRefConfigurationID))
ON (qry_BomLevel2_PartNo.XRefConfigurationID = qry_BomLevel2_Desc.XRefConfigurationID)
AND (qry_BomLevel2_PartNo.ChildRevNr = qry_BomLevel2_Desc.ChildRevNr)
AND (qry_BomLevel2_PartNo.ChildID = qry_BomLevel2_Desc.ChildID))
** 我在这里编辑了代码,因为当我尝试将其添加为答案时,它说它太长了。在这方面我会变得更好。感谢您的帮助,因为这让我起床并开始工作。
【问题讨论】:
【参考方案1】:MS Access 用所有荒谬、无用的括号来制造噩梦。如果您将查询复制到文本编辑器中,例如免费的 Notepad++,它会突出显示开始和结束分隔符,这将使这样的工作变得更加容易。
我不知道这是否会做你想做的事,但它应该会清除你当前遇到的语法错误。
SELECT *
INTO tbl_Test
FROM
(SELECT
qry_BomLevel1_PartNo.Type, qry_BomLevel1_PartNo.PartNo,
qry_BomLevel1_Desc.Description, qry_BomLevel1_Rev.Revision,
qry_BomLevel1_PartNo.Qty, qry_BomLevel1_Comment.Comment
FROM
qry_BomLevel1_PartNo
LEFT JOIN
((qry_BomLevel1_Desc
LEFT JOIN
qry_BomLevel1_Rev ON (qry_BomLevel1_Desc.XRefConfigurationID = qry_BomLevel1_Rev.XRefConfigurationID)
AND (qry_BomLevel1_Desc.ChildRevNr = qry_BomLevel1_Rev.ChildRevNr)
AND (qry_BomLevel1_Desc.ChildID = qry_BomLevel1_Rev.ChildID))
LEFT JOIN
qry_BomLevel1_Comment ON (qry_BomLevel1_Rev.XRefConfigurationID = qry_BomLevel1_Comment.XRefConfigurationID)
AND (qry_BomLevel1_Rev.ChildRevNr = qry_BomLevel1_Comment.ChildRevNr)
AND (qry_BomLevel1_Rev.ChildID = qry_BomLevel1_Comment.ChildID))
ON (qry_BomLevel1_PartNo.XRefConfigurationID = qry_BomLevel1_Desc.XRefConfigurationID)
AND (qry_BomLevel1_PartNo.ChildRevNr = qry_BomLevel1_Desc.ChildRevNr)
AND (qry_BomLevel1_PartNo.ChildID = qry_BomLevel1_Desc.ChildID)) --<--Add Closing paren here
UNION ALL
(SELECT --<--Add Opening paren here
qry_BomLevel2_PartNo.Type, qry_BomLevel2_PartNo.PartNo,
qry_BomLevel2_Desc.Description, qry_BomLevel2_Rev.Revision,
qry_BomLevel2_PartNo.Qty, qry_BomLevel2_Comment.Comment
FROM --<--Delete Opening paren here
qry_BomLevel2_PartNo
LEFT JOIN
((qry_BomLevel2_Desc
LEFT JOIN
qry_BomLevel2_Rev ON (qry_BomLevel2_Desc.ChildID = qry_BomLevel2_Rev.ChildID)
AND (qry_BomLevel2_Desc.ChildRevNr = qry_BomLevel2_Rev.ChildRevNr)
AND (qry_BomLevel2_Desc.XRefConfigurationID = qry_BomLevel2_Rev.XRefConfigurationID))
LEFT JOIN
qry_BomLevel2_Comment ON (qry_BomLevel2_Rev.ChildID = qry_BomLevel2_Comment.ChildID)
AND (qry_BomLevel2_Rev.ChildRevNr = qry_BomLevel2_Comment.ChildRevNr)
AND (qry_BomLevel2_Rev.XRefConfigurationID = qry_BomLevel2_Comment.XRefConfigurationID))
ON (qry_BomLevel2_PartNo.XRefConfigurationID = qry_BomLevel2_Desc.XRefConfigurationID)
AND (qry_BomLevel2_PartNo.ChildRevNr = qry_BomLevel2_Desc.ChildRevNr)
AND (qry_BomLevel2_PartNo.ChildID = qry_BomLevel2_Desc.ChildID)
)
【讨论】:
我自己买了 Notepad++,这个工具会像你建议的那样非常有用。我尝试了你的建议并得到了同样的错误,但做了一些括号并让它工作。您如何在此处正确发布代码?我会发布最终有效的方法。 最简单的方法是在代码块的上方和下方放置一个带有三个反引号的行。 (键盘左上角的键。)如果您单击我的答案上的edit
按钮,它将向您显示带有反引号行的原始输入。一个单词或短语周围的一个反勾号会使它变灰,就像它在“编辑”中所做的那样。
我看到 marc_s 在您的问题中使用的另一种方法是将所有行缩进四个空格。以上是关于使用 UNION ALL 查询在 FROM 子句中出现语法错误的主要内容,如果未能解决你的问题,请参考以下文章