Sql 访问:UNION发生溢出错误,但UNION ALL或单个查询未发生溢出错误

Sql 访问:UNION发生溢出错误,但UNION ALL或单个查询未发生溢出错误,sql,ms-access,union,Sql,Ms Access,Union,为什么在使用UNION查询而不是UNION ALL时会出现溢出错误??联合的每一方的查询都可以独立工作,并且每个查询所作用的表都是相同的,即具有完全相同结构的实时数据表和存档数据表 查询工作: SELECT Format(CVDate([DateID] & " " & [TimeID]),"yyyy/mm/dd hh:nn:ss") & "-" & [RecNum] AS DateTimeRecNumID, [QC Records].WONum,

为什么在使用UNION查询而不是UNION ALL时会出现溢出错误??联合的每一方的查询都可以独立工作,并且每个查询所作用的表都是相同的,即具有完全相同结构的实时数据表和存档数据表

查询工作:

SELECT Format(CVDate([DateID] & " " & [TimeID]),"yyyy/mm/dd hh:nn:ss") & "-" & [RecNum] AS DateTimeRecNumID, 
    [QC Records].WONum, 
    [QC Records].InspName1, 
    [QC Records].QtyInsp, 
    Nz([008],0)+Nz([011],0)+Nz([012],0)+Nz([013],0)+Nz([014],0)+Nz([015],0)+Nz([016],0)+Nz([017],0)+Nz([018],0)+Nz([019],0)+Nz([020],0)+Nz([022],0)+Nz([023],0)+Nz([029],0)+Nz([035],0)+Nz([036],0)+Nz([037],0)+Nz([040],0)+Nz([041],0)+Nz([044],0)+Nz([045],0)+Nz([046],0)+Nz([047],0)+Nz([048],0)+Nz([050],0)+Nz([052],0)+Nz([055],0)+Nz([057],0)+Nz([059],0)+Nz([060],0)+Nz([062],0)+Nz([064],0)+Nz([066],0)+Nz([070],0)+Nz([072],0)+Nz([075],0)+Nz([077],0)+Nz([080],0)+Nz([081],0)+Nz([082],0)+Nz([083],0)+Nz([084],0)+Nz([085],0)+Nz([086],0)+Nz([088],0)+Nz([095],0)+Nz([096],0)+Nz([097],0)+Nz([111],0)+Nz([113],0)+Nz([115],0)+Nz([116],0)+Nz([117],0)+Nz([118],0)+Nz([119],0)+Nz([120],0)+Nz([121],0)+Nz([122],0)+Nz([123],0)+Nz([124],0)+Nz([125],0)+Nz([126],0)+Nz([127],0)+Nz([128],0)+Nz([129],0)+Nz([130],0)+Nz([130],0) AS SumFaults,
    1-([SumFaults]/[QtyInsp]) AS PassRate,
    [QC Records].ItemNum
FROM [QC Records]
WHERE ((([QC Records].ProdSrc)="Production"))
UNION ALL
SELECT Format(CVDate([DateID] & " " & [TimeID]),"yyyy/mm/dd hh:nn:ss") & "-" & [RecNum] AS DateTimeRecNumID,
    [QC Records (Archive)].WONum,
    [QC Records (Archive)].InspName1,
    [QC Records (Archive)].QtyInsp,
    Nz([008],0)+Nz([011],0)+Nz([012],0)+Nz([013],0)+Nz([014],0)+Nz([015],0)+Nz([016],0)+Nz([017],0)+Nz([018],0)+Nz([019],0)+Nz([020],0)+Nz([022],0)+Nz([023],0)+Nz([029],0)+Nz([035],0)+Nz([036],0)+Nz([037],0)+Nz([040],0)+Nz([041],0)+Nz([044],0)+Nz([045],0)+Nz([046],0)+Nz([047],0)+Nz([048],0)+Nz([050],0)+Nz([052],0)+Nz([055],0)+Nz([057],0)+Nz([059],0)+Nz([060],0)+Nz([062],0)+Nz([064],0)+Nz([066],0)+Nz([070],0)+Nz([072],0)+Nz([075],0)+Nz([077],0)+Nz([080],0)+Nz([081],0)+Nz([082],0)+Nz([083],0)+Nz([084],0)+Nz([085],0)+Nz([086],0)+Nz([088],0)+Nz([095],0)+Nz([096],0)+Nz([097],0)+Nz([111],0)+Nz([113],0)+Nz([115],0)+Nz([116],0)+Nz([117],0)+Nz([118],0)+Nz([119],0)+Nz([120],0)+Nz([121],0)+Nz([122],0)+Nz([123],0)+Nz([124],0)+Nz([125],0)+Nz([126],0)+Nz([127],0)+Nz([128],0)+Nz([129],0)+Nz([130],0)+Nz([130],0) AS SumFaults,
    1-([SumFaults]/[QtyInsp]) AS PassRate,
    [QC Records (Archive)].ItemNum
FROM [QC Records (Archive)]
WHERE ((([QC Records (Archive)].ProdSrc)="Production"));
联合后的“全部”不起作用:

SELECT Format(CVDate([DateID] & " " & [TimeID]),"yyyy/mm/dd hh:nn:ss") & "-" & [RecNum] AS DateTimeRecNumID, 
    [QC Records].WONum, 
    [QC Records].InspName1, 
    [QC Records].QtyInsp, 
    Nz([008],0)+Nz([011],0)+Nz([012],0)+Nz([013],0)+Nz([014],0)+Nz([015],0)+Nz([016],0)+Nz([017],0)+Nz([018],0)+Nz([019],0)+Nz([020],0)+Nz([022],0)+Nz([023],0)+Nz([029],0)+Nz([035],0)+Nz([036],0)+Nz([037],0)+Nz([040],0)+Nz([041],0)+Nz([044],0)+Nz([045],0)+Nz([046],0)+Nz([047],0)+Nz([048],0)+Nz([050],0)+Nz([052],0)+Nz([055],0)+Nz([057],0)+Nz([059],0)+Nz([060],0)+Nz([062],0)+Nz([064],0)+Nz([066],0)+Nz([070],0)+Nz([072],0)+Nz([075],0)+Nz([077],0)+Nz([080],0)+Nz([081],0)+Nz([082],0)+Nz([083],0)+Nz([084],0)+Nz([085],0)+Nz([086],0)+Nz([088],0)+Nz([095],0)+Nz([096],0)+Nz([097],0)+Nz([111],0)+Nz([113],0)+Nz([115],0)+Nz([116],0)+Nz([117],0)+Nz([118],0)+Nz([119],0)+Nz([120],0)+Nz([121],0)+Nz([122],0)+Nz([123],0)+Nz([124],0)+Nz([125],0)+Nz([126],0)+Nz([127],0)+Nz([128],0)+Nz([129],0)+Nz([130],0)+Nz([130],0) AS SumFaults,
    1-([SumFaults]/[QtyInsp]) AS PassRate,
    [QC Records].ItemNum
FROM [QC Records]
WHERE ((([QC Records].ProdSrc)="Production"))
UNION  
SELECT Format(CVDate([DateID] & " " & [TimeID]),"yyyy/mm/dd hh:nn:ss") & "-" & [RecNum] AS DateTimeRecNumID,
    [QC Records (Archive)].WONum,
    [QC Records (Archive)].InspName1,
    [QC Records (Archive)].QtyInsp,
    Nz([008],0)+Nz([011],0)+Nz([012],0)+Nz([013],0)+Nz([014],0)+Nz([015],0)+Nz([016],0)+Nz([017],0)+Nz([018],0)+Nz([019],0)+Nz([020],0)+Nz([022],0)+Nz([023],0)+Nz([029],0)+Nz([035],0)+Nz([036],0)+Nz([037],0)+Nz([040],0)+Nz([041],0)+Nz([044],0)+Nz([045],0)+Nz([046],0)+Nz([047],0)+Nz([048],0)+Nz([050],0)+Nz([052],0)+Nz([055],0)+Nz([057],0)+Nz([059],0)+Nz([060],0)+Nz([062],0)+Nz([064],0)+Nz([066],0)+Nz([070],0)+Nz([072],0)+Nz([075],0)+Nz([077],0)+Nz([080],0)+Nz([081],0)+Nz([082],0)+Nz([083],0)+Nz([084],0)+Nz([085],0)+Nz([086],0)+Nz([088],0)+Nz([095],0)+Nz([096],0)+Nz([097],0)+Nz([111],0)+Nz([113],0)+Nz([115],0)+Nz([116],0)+Nz([117],0)+Nz([118],0)+Nz([119],0)+Nz([120],0)+Nz([121],0)+Nz([122],0)+Nz([123],0)+Nz([124],0)+Nz([125],0)+Nz([126],0)+Nz([127],0)+Nz([128],0)+Nz([129],0)+Nz([130],0)+Nz([130],0) AS SumFaults,
    1-([SumFaults]/[QtyInsp]) AS PassRate,
    [QC Records (Archive)].ItemNum
FROM [QC Records (Archive)]
WHERE ((([QC Records (Archive)].ProdSrc)="Production"));
错误为“溢出”

我还尝试过在UNION ALL查询上执行SELECT DISTINCT查询,它也给了我“溢出”错误…?

为什么在使用UNION查询而不是UNION ALL查询时会出现溢出错误

您表示知道UNION只返回不同的行,而UNION ALL返回所有行,包括重复的行。使用just UNION,db引擎必须对初始工作集应用排序,以便能够识别哪些是重复行,并从最终结果集中消除它们。这种排序操作给db引擎带来了额外的负担,这顺便解释了为什么UNIONALL总是比UNION快,而且往往快得惊人

在您的例子中,单独的SELECT语句已经给db引擎带来了不寻常的负担。我以前从未见过使用Nz 67次并将所有这些值相加以导出一个计算字段的Access查询。对于每个源表的每一行,db引擎必须再次执行该操作

Access可以通过一次选择来处理该工作负载。当你把他们两个结合起来的时候,它仍然可以应付。但是,当您强制执行UNION所需的排序要求时,访问会受阻

如果您的下一个问题是我可以做什么,我建议您首先查看源表。SELECT查询的复杂性是表设计的结果。如果改变是不可能的,那么至少考虑是否可以在源表中运行UPDATE语句来替换NULL 0;这可能会减轻足够多的负担,以便在没有所有这些Nz调用SELECT查询的情况下联合更简单的ie

作为最后的解决方案,考虑将每个SELECT的结果集附加到一个划痕表:

插入到scratch_表中 DateTimeRecNumID, 沃纳姆, InspName1, QtyInsp, SumFaults, 合格率, ItemNum 选择 那么Access也许可以处理

选择不同的* 从无到有的桌子;
也许您的源字段包含一些Num!由0个其他错误导致的除法。确保要与之联合的查询记录中没有错误,而不仅仅是顶级结果。您可能需要滚动或使用筛选器来检查此假设。

您能给我们提供有关查询和表的更多详细信息吗?同时请提供错误消息。@Gidil Updatedquestion@Igor更新的问题也可以一起回复多个评论作者,例如@Gidil@Igor??感谢HansUp的精彩解释。事实上,我正在重新设计整个数据库,因为它的设计非常糟糕,但我收到了一个请求,要求尽快访问存档数据,所以我试图在准备推出改进的版本之前,暂时把一些东西放在一起。我想我会尝试删除新西兰的第一个,如果失败的话,我会使用scratch table的想法。再次感谢你的帮助。