簡體   English   中英

帶有兩個以上查詢的Access 2007 SQL UNION引發錯誤

[英]Access 2007 SQL UNION with more than 2 queries raises error

我有以下查詢可以在Acces 2007上完美運行:

SELECT "Concept" AS Activity, ProjectRTMAcquisitionNeeds.Id AS id, ProjectRTMAcquisitionNeeds.AcquisitionNeed AS ItemLeft, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences.title) AS LeftRefLastRev, ProjectRTMSystemRequirements.SystemRequirement AS ItemRight, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences_1.title) AS RightRefLastRev, IIf([ProjectReferences].[rev]=[LeftRefLastRev] And [ProjectReferences_1].[rev]=[RightRefLastRev],1,0) AS Valid
FROM ((ProjectReferences AS ProjectReferences_1 INNER JOIN ProjectRTMSystemRequirements ON ProjectReferences_1.Id = ProjectRTMSystemRequirements.reference) INNER JOIN ProjectRTMAcquisitionNeeds ON ProjectRTMSystemRequirements.Id = ProjectRTMAcquisitionNeeds.SystemRequirement.Value) INNER JOIN ProjectReferences ON ProjectRTMAcquisitionNeeds.reference = ProjectReferences.Id

我有幾個這樣的查詢要“聯合”。 如果我僅對兩個查詢執行“ UNION”,但是當我嘗試對“ UNION大於2”進行訪問時,Access會告訴我查詢中的列數不相等。

我試圖對這個相同的查詢執行“ UNION”三次,如下所示(通過這種方式,我確定三個查詢中的列數相同):

SELECT "Concept" AS Activity, ProjectRTMAcquisitionNeeds.Id AS id, ProjectRTMAcquisitionNeeds.AcquisitionNeed AS ItemLeft, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences.title) AS LeftRefLastRev, ProjectRTMSystemRequirements.SystemRequirement AS ItemRight, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences_1.title) AS RightRefLastRev, IIf([ProjectReferences].[rev]=[LeftRefLastRev] And [ProjectReferences_1].[rev]=[RightRefLastRev],1,0) AS Valid
FROM ((ProjectReferences AS ProjectReferences_1 INNER JOIN ProjectRTMSystemRequirements ON ProjectReferences_1.Id = ProjectRTMSystemRequirements.reference) INNER JOIN ProjectRTMAcquisitionNeeds ON ProjectRTMSystemRequirements.Id = ProjectRTMAcquisitionNeeds.SystemRequirement.Value) INNER JOIN ProjectReferences ON ProjectRTMAcquisitionNeeds.reference = ProjectReferences.Id
UNION ALL
SELECT "Concept" AS Activity, ProjectRTMAcquisitionNeeds.Id AS id, ProjectRTMAcquisitionNeeds.AcquisitionNeed AS ItemLeft, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences.title) AS LeftRefLastRev, ProjectRTMSystemRequirements.SystemRequirement AS ItemRight, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences_1.title) AS RightRefLastRev, IIf([ProjectReferences].[rev]=[LeftRefLastRev] And [ProjectReferences_1].[rev]=[RightRefLastRev],1,0) AS Valid
FROM ((ProjectReferences AS ProjectReferences_1 INNER JOIN ProjectRTMSystemRequirements ON ProjectReferences_1.Id = ProjectRTMSystemRequirements.reference) INNER JOIN ProjectRTMAcquisitionNeeds ON ProjectRTMSystemRequirements.Id = ProjectRTMAcquisitionNeeds.SystemRequirement.Value) INNER JOIN ProjectReferences ON ProjectRTMAcquisitionNeeds.reference = ProjectReferences.Id
UNION ALL
SELECT "Concept" AS Activity, ProjectRTMAcquisitionNeeds.Id AS id, ProjectRTMAcquisitionNeeds.AcquisitionNeed AS ItemLeft, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences.title) AS LeftRefLastRev, ProjectRTMSystemRequirements.SystemRequirement AS ItemRight, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences_1.title) AS RightRefLastRev, IIf([ProjectReferences].[rev]=[LeftRefLastRev] And [ProjectReferences_1].[rev]=[RightRefLastRev],1,0) AS Valid
FROM ((ProjectReferences AS ProjectReferences_1 INNER JOIN ProjectRTMSystemRequirements ON ProjectReferences_1.Id = ProjectRTMSystemRequirements.reference) INNER JOIN ProjectRTMAcquisitionNeeds ON ProjectRTMSystemRequirements.Id = ProjectRTMAcquisitionNeeds.SystemRequirement.Value) INNER JOIN ProjectReferences ON ProjectRTMAcquisitionNeeds.reference = ProjectReferences.Id

但這也不起作用。

您對我做錯了什么有想法嗎?

提前致謝。

SELECT A.Activity,A.id,A.ItemLeft,A.LeftRefLastRev,A.ItemRight,A.RightRefLastRev,A.Valid
FROM           
    (
        SELECT "Concept" AS Activity, ProjectRTMAcquisitionNeeds.Id AS id, ProjectRTMAcquisitionNeeds.AcquisitionNeed AS ItemLeft, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences.title) AS LeftRefLastRev, ProjectRTMSystemRequirements.SystemRequirement AS ItemRight, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences_1.title) AS RightRefLastRev, IIf([ProjectReferences].[rev]=[LeftRefLastRev] And [ProjectReferences_1].[rev]=[RightRefLastRev],1,0) AS Valid
        FROM ((ProjectReferences AS ProjectReferences_1 INNER JOIN ProjectRTMSystemRequirements ON ProjectReferences_1.Id = ProjectRTMSystemRequirements.reference) INNER JOIN ProjectRTMAcquisitionNeeds ON ProjectRTMSystemRequirements.Id = ProjectRTMAcquisitionNeeds.SystemRequirement.Value) INNER JOIN ProjectReferences ON ProjectRTMAcquisitionNeeds.reference = ProjectReferences.Id
        UNION ALL
        SELECT "Concept" AS Activity, ProjectRTMAcquisitionNeeds.Id AS id, ProjectRTMAcquisitionNeeds.AcquisitionNeed AS ItemLeft, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences.title) AS LeftRefLastRev, ProjectRTMSystemRequirements.SystemRequirement AS ItemRight, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences_1.title) AS RightRefLastRev, IIf([ProjectReferences].[rev]=[LeftRefLastRev] And [ProjectReferences_1].[rev]=[RightRefLastRev],1,0) AS Valid
        FROM ((ProjectReferences AS ProjectReferences_1 INNER JOIN ProjectRTMSystemRequirements ON ProjectReferences_1.Id = ProjectRTMSystemRequirements.reference) INNER JOIN ProjectRTMAcquisitionNeeds ON ProjectRTMSystemRequirements.Id = ProjectRTMAcquisitionNeeds.SystemRequirement.Value) INNER JOIN ProjectReferences ON ProjectRTMAcquisitionNeeds.reference = ProjectReferences.Id
    ) A
        UNION ALL
        SELECT "Concept" AS Activity, ProjectRTMAcquisitionNeeds.Id AS id, ProjectRTMAcquisitionNeeds.AcquisitionNeed AS ItemLeft, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences.title) AS LeftRefLastRev, ProjectRTMSystemRequirements.SystemRequirement AS ItemRight, (SELECT MAX(rev) FROM ProjectReferences AS PR WHERE PR.title = ProjectReferences_1.title) AS RightRefLastRev, IIf([ProjectReferences].[rev]=[LeftRefLastRev] And [ProjectReferences_1].[rev]=[RightRefLastRev],1,0) AS Valid

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM