MS Access:左连接不返回左表中的所有行

Posted

技术标签:

【中文标题】MS Access:左连接不返回左表中的所有行【英文标题】:MS Access: Left Join does not return all the rows in the left table 【发布时间】:2017-10-28 10:22:52 【问题描述】:

样本数据:

SELECT tblStudent.student_id,
       [monthly_fee]+[book_fee] AS [Total Fee],
       Sum(tblReceipt.receipt_amount) AS SumOfreceipt_amount,
       [monthly_fee]+[book_fee]-Nz(Sum([tblReceipt]![receipt_amount]),0) AS Outstanding,
       tblReceipt.month,
       tblReceipt.year
FROM tblStudent
LEFT JOIN tblReceipt ON tblStudent.student_id = tblReceipt.student_id
GROUP BY tblStudent.student_id,
         [monthly_fee]+[book_fee],
         tblReceipt.Description,
         tblReceipt.month,
         tblReceipt.year
HAVING (((Sum(tblReceipt.receipt_amount))>0)
        AND ((tblReceipt.Description)='Total Fee')
        AND (([monthly_fee]+[book_fee]-Nz(Sum([tblReceipt]![receipt_amount]),0))>0)
        AND ((tblReceipt.month)=[Forms]![frmDialogMonth3]![cb_Month])
        AND ((tblReceipt.year)=[Forms]![frmDialogMonth3]![txt_Year]))
OR (((Sum(tblReceipt.receipt_amount)) IS NULL))
ORDER BY tblStudent.student_id;

你好,

请在附件中找到包含数据的示例表和上面的 sql 语句。 我想创建一个报告来显示未支付和未全额支付当月总费用(描述 = 总费用)的学生,包括他们当月的未付金额。

我得到的结果只显示未全额支付总费用的学生,以及在 tblReceipt 中没有任何记录的学生。那些在 tblReceipt 中的记录不是 Total Fee 的学生没有出现在结果中。

请在下面找到示例结果。

Result

【问题讨论】:

【参考方案1】:

如果 tblReceipt 是 Left Joined,则不能对它进行任何过滤。

您需要首先构建一个查询以返回每个学生在相关月份的总费用收据:

SELECT student_id, Sum(receipt_amount) AS FeeReceipts
FROM tblReceipt
WHERE [description]='Total Fee' AND [month]=[Forms]![frmDialogMonth3]![cb_Month] AND [year]=[Forms]![frmDialogMonth3]![txt_Year]
GROUP BY student_id;

我称之为 MonthFeeReceipts。然后在主查询中使用它:

SELECT tblStudent.student_id, monthly_fee, book_fee, FeeReceipts, [monthly_fee]+[book_fee]-Nz([FeeReceipts],0) AS Outstanding
FROM tblStudent LEFT JOIN MonthFeeReceipts ON tblStudent.student_id = MonthFeeReceipts.student_id;

【讨论】:

嗨。如果它成功了,那么请将其标记为答案。谢谢马克

以上是关于MS Access:左连接不返回左表中的所有行的主要内容,如果未能解决你的问题,请参考以下文章

SQL中有几种连接?有啥区别?(左连右连内连和外连?)

LEFT JOIN 不返回 MS Access 左表中的所有行?

左外连接不返回左表中的所有行?

MySQL连接5种方式

Access SQL 中的联接语句

SQL左连接不包括左表中的所有记录