MS Access中两个派生表LEFT JOIN语法错误问题求助
MS Access LEFT JOIN派生表语法错误解决方案
正确查询语句
SELECT 年月列表.年月, Nz(加班统计.调休加班总时长, 0) AS 调休加班总时长, Nz(加班统计.支票支付加班总时长, 0) AS 支票支付加班总时长 FROM ( SELECT '2023-01' AS 年月 UNION ALL SELECT '2023-02' UNION ALL SELECT '2023-03' UNION ALL SELECT '2023-04' UNION ALL SELECT '2023-05' UNION ALL SELECT '2023-06' UNION ALL SELECT '2023-07' UNION ALL SELECT '2023-08' UNION ALL SELECT '2023-09' UNION ALL SELECT '2023-10' UNION ALL SELECT '2023-11' UNION ALL SELECT '2023-12' ) AS 年月列表 LEFT JOIN ( SELECT FORMAT(加班日期, 'yyyy-mm') AS 年月, SUM(IIF(加班类型='调休' AND 审批状态='已审批', 加班时长, 0)) AS 调休加班总时长, SUM(IIF(加班类型='支票支付', 加班时长, 0)) AS 支票支付加班总时长 FROM 加班表 WHERE 员工ID = '000510205' AND YEAR(加班日期) = 2023 GROUP BY FORMAT(加班日期, 'yyyy-mm') ) AS 加班统计 ON 年月列表.年月 = 加班统计.年月 ORDER BY 年月列表.年月;
关键语法说明
- 必须给派生表加别名:Access要求所有子查询生成的派生表必须指定别名(如
AS 年月列表、AS 加班统计),这是导致你出现FROM子句错误的核心原因之一 - 括号嵌套规范:每个派生表需要单独用括号包裹,LEFT JOIN的结构要严格符合Access的SQL语法要求
- 处理空值:用
Nz()函数将无加班记录月份的NULL值替换为0,保证结果表数据完整性 - 适配实际表结构:请将语句中的
加班表、加班日期、加班类型等字段/表名替换为你数据库中的实际名称
内容的提问来源于stack exchange,提问作者Abhishek Kumar
相关产品推荐
相关产品推荐

