模糊的外部联接?

时间:2013-12-17 21:15:58

标签: sql database ms-access join

我收到以下错误消息...

“无法执行SQL语句,因为它包含不明确的外连接。要强制首先执行其中一个连接,请创建一个执行第一个连接的单独查询,然后在SQL语句中包含该查询。” / p>

我如何修复这个???如果我用“INNER JOIN”替换“LEFT JOIN”,则该bug会消失,但是没有完成所需的操作。

这是我的代码:

SELECT route.productfam, 
       facility.location, 
       asmlines.line, 
       tableconsolidate2.sumofyr, 
       tableconsolidate2.sumofyr0, 
       tableconsolidate2.sumofyr1, 
       tableconsolidate2.sumofyr2, 
       tableconsolidate2.sumofyr3, 
       tableconsolidate2.sumofyr4, 
       tableconsolidate2.sumofyr5, 
       route.cycletime, 
       route.numperprod, 
       facilitylines.operationalhr, 
       [18months].[month 1], 
       [18months].[month 2], 
       [18months].[month 3], 
       [18months].[month 4], 
       [18months].[month 5], 
       [18months].[month 6], 
       [18months].[month 7], 
       [18months].[month 8], 
       [18months].[month 9], 
       [18months].[month 10], 
       [18months].[month 11], 
       [18months].[month 12], 
       [18months].[month 13], 
       [18months].[month 14], 
       [18months].[month 15], 
       [18months].[month 16], 
       [18months].[month 17], 
       [18months].[month 18] 
FROM   ((productfamily 
         INNER JOIN (facility 
                     INNER JOIN tableconsolidate2 
                             ON facility.location = 
                                tableconsolidate2.[build plant]) 
                 ON productfamily.productfamily = 
                    tableconsolidate2.[prod series]) 
        LEFT JOIN 18months 
               ON ( facility.location = [18months].location ) 
                  AND ( productfamily.productfamily = [18months].[item type] )) 
       INNER JOIN ((asmlines 
                    INNER JOIN facilitylines 
                            ON asmlines.line = facilitylines.line) 
                   INNER JOIN route 
                           ON asmlines.line = route.line) 
               ON ( productfamily.productfamily = route.productfam ) 
                  AND ( facility.location = facilitylines.facility ) 

GROUP BY route.productfam, facility.location, Asmlines.line, tableconsolidate2.SumOfyr, tableconsolidate2.SumOfyr0, tableconsolidate2.SumOfyr1, tableconsolidate2.SumOfyr2, tableconsolidate2.SumOfyr3, tableconsolidate2.SumOfyr4, tableconsolidate2.SumOfyr5, route.cycletime, route.numperprod, facilitylines.operationalhr, [18Months].[Month 1], [18Months].[Month 2], [18Months].[Month 3], [18Months].[Month 4], [18Months].[Month 5], [18Months].[Month 6], [18Months].[Month 7], [18Months].[Month 8], [18Months].[Month 9], [18Months].[Month 10], [18Months].[Month 11], [18Months].[Month 12], [18Months].[Month 13], [18Months].[Month 14], [18Months].[Month 15], [18Months].[Month 16], [18Months].[Month 17], [18Months].[Month 18], route.productfam

ORDER BY facility.location;

1 个答案:

答案 0 :(得分:3)

如果创建包含LEFT JOIN和INNER JOIN的查询,Access可能无法确定首先执行哪个连接操作。因为结果是否不同,具体取决于是先执行左连接还是内连接,Access会显示错误消息:

要更正此错误,您必须修改查询,以便明确首先执行哪个连接。

因此,可以通过将其拆分为两个查询然后将它们加入到其他查询中来实现解决方案。

查询1:

SELECT route.productfam, facility.location, Asmlines.line, [18Months].[Month 1], [18Months].[Month 2], [18Months].[Month 3], [18Months].[Month 4], [18Months].[Month 5], [18Months].[Month 6], [18Months].[Month 7], [18Months].[Month 8], [18Months].[Month 9], [18Months].[Month 10], [18Months].[Month 11], [18Months].[Month 12], [18Months].[Month 13], [18Months].[Month 14], [18Months].[Month 15], [18Months].[Month 16], [18Months].[Month 17], [18Months].[Month 18], route.cycletime, route.numperprod, facilitylines.operationalhr
FROM (facility INNER JOIN (ProductFamily INNER JOIN 18Months ON ProductFamily.productfamily = [18Months].[Item Type]) ON facility.location = [18Months].Location) INNER JOIN ((Asmlines INNER JOIN facilitylines ON Asmlines.line = facilitylines.line) INNER JOIN route ON Asmlines.line = route.line) ON (ProductFamily.productfamily = route.productfam) AND (facility.location = facilitylines.facility)
GROUP BY route.productfam, facility.location, Asmlines.line, [18Months].[Month 1], [18Months].[Month 2], [18Months].[Month 3], [18Months].[Month 4], [18Months].[Month 5], [18Months].[Month 6], [18Months].[Month 7], [18Months].[Month 8], [18Months].[Month 9], [18Months].[Month 10], [18Months].[Month 11], [18Months].[Month 12], [18Months].[Month 13], [18Months].[Month 14], [18Months].[Month 15], [18Months].[Month 16], [18Months].[Month 17], [18Months].[Month 18], route.cycletime, route.numperprod, facilitylines.operationalhr, route.productfam
ORDER BY facility.location;

查询2:

SELECT route.productfam, facility.location, Asmlines.line, tableconsolidate2.SumOfyr, tableconsolidate2.SumOfyr0, tableconsolidate2.SumOfyr1, tableconsolidate2.SumOfyr2, tableconsolidate2.SumOfyr3, tableconsolidate2.SumOfyr4, tableconsolidate2.SumOfyr5, route.cycletime, route.numperprod, facilitylines.operationalhr
FROM (ProductFamily INNER JOIN (facility INNER JOIN tableconsolidate2 ON facility.location = tableconsolidate2.[Build Plant]) ON ProductFamily.productfamily = tableconsolidate2.[Prod Series]) INNER JOIN ((Asmlines INNER JOIN facilitylines ON Asmlines.line = facilitylines.line) INNER JOIN route ON Asmlines.line = route.line) ON (ProductFamily.productfamily = route.productfam) AND (facility.location = facilitylines.facility)
GROUP BY route.productfam, facility.location, Asmlines.line, tableconsolidate2.SumOfyr, tableconsolidate2.SumOfyr0, tableconsolidate2.SumOfyr1, tableconsolidate2.SumOfyr2, tableconsolidate2.SumOfyr3, tableconsolidate2.SumOfyr4, tableconsolidate2.SumOfyr5, route.cycletime, route.numperprod, facilitylines.operationalhr, route.productfam
ORDER BY facility.location;

查询3:

Query 1 LEFT JOIN Query 2