【问题标题】:MS Access 2016 "JOIN expression not supported" when using LEFT JOIN使用 LEFT JOIN 时,MS Access 2016“不支持 JOIN 表达式”
【发布时间】:2016-04-18 03:53:02
【问题描述】:

我试图在销售系统中获得未结余额。我通过组合 3 个表来做到这一点,因为它是多对多的关系。根据 MSDN

“左连接或右连接可以嵌套在内部连接中,但是 INNER JOIN 不能嵌套在 LEFT JOIN 或 RIGHT JOIN 中"

但我在运行查询时收到错误 "JOIN expression not supported" 这是我的代码:

SELECT DISTINCTROW Table1.CustomerName, Sum(Table1.TotalAmount) AS [Total Payable Amount]
, Sum(Table2.PaidAmount) AS [Total Paid Amount]
, Sum(Table1.TotalAmount - Table2.PaidAmount) AS [Total Outstanding Balance]

FROM Table2 

INNER JOIN 
(Table1 LEFT JOIN Table3 ON Table1.InvoiceNumber =Table3.InvoiceNumber) 
ON Table2.ReceiptNumber = Table3.ReceiptNumber

GROUP BY Table1.CustomerName;

【问题讨论】:

  • 似乎是升级到不同数据库的好理由。

标签: sql ms-access join left-join inner-join


【解决方案1】:

一种选择是将LEFT JOIN 替换为INNER JOIN,并修改ON 条件以保留来自Table1 的不匹配行,从而模拟LEFT JOIN

SELECT DISTINCTROW Table1.CustomerName, Sum(Table1.TotalAmount) AS [Total Payable Amount],
    Sum(Table2.PaidAmount) AS [Total Paid Amount]
    Sum(Table1.TotalAmount - Table2.PaidAmount) AS [Total Outstanding Balance]
FROM Table2 
INNER JOIN 
(
    SELECT Table1.*. Table3.ReceiptNumber
    FROM Table1 INNER JOIN Table3
        ON Table1.InvoiceNumber = Table3.InvoiceNumber
    UNION
    SELECT Table1.*, NULL
    FROM Table1
    WHERE Table1.InvoiceNumber NOT IN (SELECT Table3.InvoiceNumber FROM Table3)
 )
ON Table2.ReceiptNumber = Table3.ReceiptNumber
GROUP BY Table1.CustomerName;

【讨论】:

  • 我尝试了完全相同的代码,但出现错误提示“连接操作中的语法错误”
【解决方案2】:

我总是在 MS Access SQL 上苦苦挣扎。但是在表设计器的一点帮助下,我想我发现了你的语法错误。尝试将 FROM 子句更改为:

FROM 
    (
        Table2 INNER JOIN Table3 ON Table2.ReceiptNumber = Table3.ReceiptNumber
    ) 
LEFT JOIN Table1 ON Table3.InvoiceNumber = Table1.InvoiceNumber;

这里的关键是重构您的查询,使 INNER 连接出现在括号内,而 LEFT 连接出现在括号外。

【讨论】:

  • 对不起,我的回答有错字。我已经更正了。
  • 回顾您的原始查询,我不确定它是否有意义。将 table3 内连接到 table2 否定了外连接 table1 到 table3 的效果。您不能有来自 table3 的不匹配记录,因为它们必须出现在 Table2 中。这就是发生 JOIN expression not supported 错误的原因。如果我的示例未返回预期结果,请在您的问题中添加一些示例记录和预期输出。
  • 我也觉得原来的查询很无厘头。
猜你喜欢
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 2015-04-25
  • 2014-04-23
  • 1970-01-01
  • 2015-12-14
  • 2017-04-06
  • 2012-08-05
相关资源
最近更新 更多