You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含CROSS JOIN和LEFT JOIN的SQLite查询改写为MS-ACCESS兼容语句?

解决MS Access中的JOIN语法错误问题

问题根源

MS Access SQL对多表连接的语法规则比SQLite更严格:

  • 不允许混合使用隐式连接(逗号分隔表)和显式JOIN;
  • 多步连接必须用括号明确分组执行顺序;
  • 日期常量必须用#包裹,而非单引号。

同时你原查询中存在逻辑错误:GROUP BY子句里的s.CategoryName与SELECT中的s.SubCategoryName不匹配,需修正一致。

正确的MS Access查询语句

SELECT c.CategoryName, s.SubCategoryName, COUNT(l.LoanDate) AS Count
FROM (LoanCategories c CROSS JOIN LoanSubCategories s)
LEFT JOIN Loans l
ON l.LoanCatId = c.CategoryId 
AND l.LoanSubCatId = s.CategoryId 
AND l.LoanDate = #1999-01-25#
GROUP BY c.CategoryName, s.SubCategoryName;

关键修改点说明

  1. 括号分组连接顺序:将LoanCategories和LoanSubCategories的CROSS JOIN用括号包裹,确保Access先执行这一步笛卡尔积,再与Loans表做LEFT JOIN。
  2. 日期格式修正:把'19990125'改为#1999-01-25#,符合Access的日期常量规范。
  3. GROUP BY字段对齐:将GROUP BY中的s.CategoryName改为s.SubCategoryName,与SELECT字段保持一致,避免逻辑错误。

注意:如果LoanSubCategories表的主键字段实际是SubCategoryId(而非原查询中的s.CategoryId),请将ON子句中的l.LoanSubCatId = s.CategoryId修正为l.LoanSubCatId = s.SubCategoryId,保证关联逻辑正确。

内容的提问来源于stack exchange,提问作者Masa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:52:13