2013-06-12 87 views
0

我需要做一个UNION ALLOUTER JOIN来链接两个表。考虑到我使用了微软网站(http://office.microsoft.com/en-us/access-help/combine-the-results-of-several-select-queries-by-using-a-union-query-HA010341541.aspx)的相同格式,我认为我的语法很好。但是,我反复收到这样的消息: “FROM子句中的语法错误”。访问FROM语法错误

SummaryID,..是所有字段和unitcostdata ...和税是表。

我的代码是

SELECT SummaryID, Component, Element, CapitalCost,Subsystem,SourceID 
FROM unitcostdata6-4-2013 
UNION ALL 
SELECT SummaryID, TaxSecond, TaxThird, TaxFourth, SourceID 
FROM Tax; 

任何帮助表示赞赏

回答

0

我不认为你想UNION;将UNION视为两个表格 - 它们必须具有相同的列数和数据。只要从你的领域猜出你想要的东西就是这样的OUTER JOIN,也就是说,如果你不想在JOIN中的任何一个表中消除任何数据。

SELECT ucd.*, Tax.* 
FROM [unitcostdata6-4-2013] ucd 
LEFT JOIN Tax on ucd.SummaryID = Tax.SummaryID and ucd.SourceID = Tax.SourceID 
+0

这不是他想要的。这是关于语法错误。 – Scotch

+0

对不起,但你不解释为什么查询有错误,也没有你纠正错误。错误是因为他的表名具有特殊字符,并且他没有将括号中的表格括起来。您的查询仍然会出现相同的错误。你提出了一些公平的建议/假设,但这不是问题的关键。 – Scotch

+0

我很确定MS Access不支持全外连接。 – Taryn

1

语法错误是因为您的表名为unitcostdata6-4-2013。任何有特殊字符的表或列需要用方括号进行转义,所以你需要你的表方括号括与破折号:

SELECT SummaryID, Component, Element, CapitalCost,Subsystem,SourceID 
FROM [unitcostdata6-4-2013] 
UNION ALL 
SELECT SummaryID, TaxSecond, TaxThird, TaxFourth, SourceID 
FROM Tax; 

注意,当您使用UNION查询的列数必须相同第一个查询和第二个查询之间的数据必须相同。你需要确定数据类型是否相同,那么你将不得不将它们转换为相同的。你也可以在第二个查询添加新列具有相等的列数:

SELECT SummaryID, Component, Element, CapitalCost,Subsystem,SourceID 
FROM [unitcostdata6-4-2013] 
UNION ALL 
SELECT SummaryID, TaxSecond, TaxThird, TaxFourth, null, SourceID 
FROM Tax; 

没有看到你的数据或所期望的结果,你也许可以参加关于SummaryIdSourceId表:

SELECT u.SummaryID, u.Component, u.Element, 
    u.CapitalCost,u.Subsystem,u.SourceID, 
    t.TaxSecond, t.TaxThird, t.TaxFourth 
FROM [unitcostdata6-4-2013] as u 
LEFT JOIN Tax as t 
    on u.SourceId = t.SourceId 
    and u.SummaryId = t.SummaryId 
+0

这是正确的答案。如果表名中包含破折号或其他字符,除非用方括号括起来(对于列相同),否则将会出现语法错误。 – Scotch

0

您必须在每个SELECT语句中具有相同数量的列。第一个有6个,第二个有5个。确保它们是相同的数据类型。