多次尝试后,我无法修复此左连接查询。我的查询返回与实际不同的debit_amount
,而我的实际debit_amount
小于两个月的给定值。
我的问题是为什么我的左连接值与实际值不匹配,以及如何解决此问题以获取实际值。
我的完整查询和结果如下所示。
SELECT
MONTHNAME(cc.credit_date) as month,
IFNULL(SUM(cc.credit_amount),0) AS credit,
IFNULL(SUM(cd.debit_amount),0) AS debit_amount,
MONTHNAME(cd.debit_date) AS month
FROM
cust_credit AS cc
LEFT JOIN
(SELECT
((cd.debit_date)),
IFNULL(SUM(cd.debit_amount), 0) AS debit_amount
FROM
cust_debit AS cd
GROUP BY
MONTHNAME(cd.debit_date)) cd ON ((MONTHNAME(cd.debit_date)) = MONTHNAME(cc.credit_date))
GROUP BY
MONTHNAME(cc.credit_date)
屏幕截图中该查询的结果:
如果我只运行join
来chec。查询是
SELECT (MONTHNAME(cd.debit_date)) , IFNULL(SUM(cd.debit_amount),0) AS debit_amount FROM cust_debit AS cd GROUP BY MONTHNAME(cd.debit_date )
该查询的结果:
[
CREDIT TABLE
DEBIT TABLE
答案 0 :(得分:2)
根据理论,LEFT JOIN
将为您提供数据,这在表格和左表格之间是常见的。
因此,如果LEFT JOIN
与INNER JOIN
比较,或者直接从其中一个表中选择行,则会有更多机会获得更多行。
现在,您将查看查询,您已在以下条件下加入。
ON ( (MONTHNAME(cd.debit_date)) = MONTHNAME(cc.credit_date))
因此,您将获得cust_credit
表中的所有行以及上述条件满足的所有行。
<强> ==更新== 强>
这是示例SQL,您可能需要相应地进行更改。因此,您正在尝试获取特定月份的所有信用和借记。这可以通过表之间的简单INNER JOIN
来实现。
SELECT cd.month, cc.credit_amount, cd.debit_amount FROM
(SELECT
MONTHNAME(cc.credit_date) as month,
IFNULL(SUM(cc.credit_amount),0) AS credit_amount
FROM
cust_credit cc
GROUP BY MONTHNAME(cc.credit_date)) cc
INNER JOIN
(SELECT
MONTHNAME(cd.debit_date) as month,
IFNULL(SUM(cd.debit_amount),0) AS debit_amount
FROM
cust_debit cd
GROUP BY MONTHNAME(cd.debit_date)) cd ON cc.month=cd.month;