FROM中的访问语法错误

时间:2013-06-12 21:33:12

标签: sql ms-access-2007

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

SummaryID,..是所有字段和unitcostdata ...而Tax是表格。

我的代码是

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

感谢任何帮助

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我认为你不想要UNION;将UNIONS视为一个两个表 - 它们必须具有相同的列数和数据。只需从您的字段中猜测您需要类似OUTER JOIN的内容,也就是说,如果您不想通过JOIN在任何一个表中删除任何数据。

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

答案 2 :(得分:0)

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