我目前有一个查询,其中在每个联合选择中,为了获得出现次数,我有类似的内容:
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 向我抛出一个错误,说它找不到表或查询“零件”。我一生都无法弄清楚为什么它不能使用它;有人可以指导我出什么问题吗?
答案 0 :(得分:0)
错误似乎很清楚。表别名(即 parts
)是指用于定义列的表或引用。它确实为数据提供了一个新的“来源”。
也就是说,它不能在 from
子句中作为表重用。
在所有数据库中都是如此。但是,几乎任何其他数据库都支持通用表表达式——它们可以满足您的需求。 MS Access 没有。您唯一的选择是:
UNION
查询。注意:可能还有其他方法来编写您要编写的查询。为此,我建议您提出一个新问题,其中包含示例数据、所需结果以及您想要实现的目标的清晰说明。
此外,您可能不想要 UNION
,因为它会删除重复项。 UNION ALL
更常见。