【发布时间】:2021-01-28 02:41:17
【问题描述】:
我的目的是创建一个表格,其中包含每种产品在两个不同年份的订单数量和收入。 我的想法是使用双左连接,但我不明白为什么这个查询在 MS ACCESS 上不起作用。 我决定使用 LEFT JOIN 是因为在每年的子查询中,如果未订购某些产品可能不会出现。 子查询 a 和 b 都可以。他们分开工作。 这个查询有什么问题?
SELECT p.PK_Product_ID, a.[2013_Orders], a.[2013_Gross_Value], b.[2014_Orders], b.[2014_Gross_Value]
FROM Products AS p
LEFT JOIN
(SELECT p.PK_Product_ID AS Product_ID, COUNT(o.PK_Order_ID) AS 2013_Orders,
SUM((p.UnitPrice*od.Quantity)) AS 2013_Gross_Value
FROM [Order Details] AS od, p, Orders AS o
WHERE od.FK_Product_ID = p.PK_Product_ID
AND od.FK_Order_ID = o.PK_Order_ID
AND YEAR(o.OrderDate) = 2013
GROUP BY p.PK_Product_ID) AS a
ON p.PK_Product_ID = a.Product_ID
LEFT JOIN
(SELECT p.PK_Product_ID AS Product_ID, COUNT(o.PK_Order_ID) AS 2014_Orders, SUM((p.UnitPrice*od.Quantity)) AS 2014_Gross_Value
FROM od, p, o
WHERE od.FK_Product_ID = p.PK_Product_ID
AND od.FK_Order_ID = o.PK_Order_ID
AND YEAR(o.OrderDate) = 2014
GROUP BY p.PK_Product_ID) AS b
ON p.PK_Product_ID = b.Product_ID;
【问题讨论】:
-
子查询可以独立执行吗?
-
等等,MS-Access 没有一些特殊的双连接语法。
-
子查询没问题。我可以单独运行它们
-
今日提示:始终使用现代、明确的
JOIN语法!更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接。 -
“不起作用”不是问题描述。如果其他一切都很好,您可能只是缺少了超过 2 个 JOIN 所需的括号。
标签: sql ms-access subquery left-join ms-access-2016