SQL FROM(UNION) AS 表、INNER JOIN、COUNT() FROM 表中的“找不到表”错误

时间:2021-04-28 10:14:13

标签: sql ms-access count inner-join

我目前有一个查询,其中在每个联合选择中,为了获得出现次数,我有类似的内容:

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 向我抛出一个错误,说它找不到表或查询“零件”。我一生都无法弄清楚为什么它不能使用它;有人可以指导我出什么问题吗?

1 个答案:

答案 0 :(得分:0)

错误似乎很清楚。表别名(即 parts)是指用于定义列的表或引用。它确实为数据提供了一个新的“来源”。

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

在所有数据库中都是如此。但是,几乎任何其他数据库都支持通用表表达式——它们可以满足您的需求。 MS Access 没有。您唯一的选择是:

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

注意:可能还有其他方法来编写您要编写的查询。为此,我建议您提出一个问题,其中包含示例数据、所需结果以及您想要实现的目标的清晰说明。

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