从ACTUAL值左连接MIS-MATCH

时间:2018-01-22 17:51:35

标签: mysql sql join left-join

多次尝试后,我无法修复此左连接查询。我的查询返回与实际不同的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 QUERRY

如果我只运行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 )

该查询的结果:

[RESULT IMAGE[2]

CREDIT TABLE

cust_credit

DEBIT TABLE

cust_debit

1 个答案:

答案 0 :(得分:2)

根据理论,LEFT JOIN将为您提供数据,这在表格和左表格之间是常见的。

因此,如果LEFT JOININNER 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;