"Can't find table" SQL 中的错误 FROM(UNION) AS table、INNER JOIN、COUNT() FROM table

"Can't find table" error in SQL FROM(UNION) AS table, INNER JOIN, COUNT() FROM table

我目前有一个查询,其中每个联合 select,为了计算出现的次数,我有类似的东西:

SELECT Order_Id, Order_Date, 
       C.cnt AS Order_Parts
  FROM table1
  INNER JOIN (SELECT Order_Id, count(Order_Id) as cnt
                 FROM table1
                GROUP BY Order_Id) C ON table1.Order_Id = C.Order_Id
UNION SELECT Order_Id, Order_Date, 
       C.cnt AS Order_Parts
  FROM table2
  INNER JOIN (SELECT Order_Id, count(Order_Id) as cnt
                 FROM table2
                GROUP BY Order_Id) C ON table2.Order_Id = C.Order_Id

它工作正常,但我正在重新组织它以便 UNION 位于 Query FROM 中,所以像这样:

SELECT
Order_Id,Order_Date,C.cnt AS Order_Parts

FROM(
    SELECT Order_Id, Order_Date
    FROM table1
    UNION SELECT Order_Id, Order_Date
    FROM table2
) AS Parts
    INNER JOIN (SELECT Order_Id, count(Order_Id) as cnt
                FROM Parts
                GROUP BY Order_Id) C ON Parts.Order_Id = C.Order_Id

但是 Access 向我抛出一个错误,说它找不到 table 或查询 'Parts'。我一辈子都弄不明白为什么它不能使用它;谁能告诉我哪里出了问题?

错误似乎很明显。 table 别名(即 parts)引用 table 或用于定义列的引用。它确实为数据提供了新的“来源”。

也就是说,它不能在 from 子句中作为 table 重复使用。

所有数据库都是如此。然而,几乎任何其他数据库都支持常见的 table 表达式——它们可以做你想做的事。 MS Access 没有。您唯一的选择是:

  • 对第二个参考重复UNION查询。
  • 使用视图。

注意:可能有其他方法来编写您要编写的查询。为此,我建议您提出一个 new 问题,其中包含样本数据、期望的结果以及对您想要完成的目标的清晰解释。

此外,您可能不需要 UNION,因为这样会删除重复项。 UNION ALL更常见。