Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql使用求和条件左连接_Mysql_Sql_Join - Fatal编程技术网

Mysql使用求和条件左连接

Mysql使用求和条件左连接,mysql,sql,join,Mysql,Sql,Join,我正在尝试创建一个报告,该报告将显示有未清帐户余额的客户,但我似乎无法使用左连接使其正常工作 我有3个表-客户、购买和付款,我试图显示总购买成本减去付款大于0的客户 到目前为止,我有以下疑问: mysqli_query("SELECT customers.name as name, SUM(purchases.cost) as cost, SUM(payments.paymentamount) as payments FROM customers LEFT JOIN purchases ON

我正在尝试创建一个报告,该报告将显示有未清帐户余额的客户,但我似乎无法使用左连接使其正常工作

我有3个表-客户、购买和付款,我试图显示总购买成本减去付款大于0的客户

到目前为止,我有以下疑问:

mysqli_query("SELECT customers.name as name, SUM(purchases.cost) as cost, SUM(payments.paymentamount) as payments FROM customers 
LEFT JOIN purchases ON purchases.customerid = customers.id 
LEFT JOIN payments ON payments.customerid = customers.id 
WHERE (cost - payments) > 0 
GROUP BY customers.id");
有人知道为什么这不起作用吗


谢谢你的帮助

您需要为每个
customerID
计算子查询中的每个总计,以避免错误的结果

SELECT  a.*,
        COALESCE(b.totalPurchase , 0) - COALESCE(c.totalPayment , 0) AS Balance
FROM    customers a
        LEFT JOIN
        (
            SELECT  customerid, SUM(cost) totalPurchase
            FROM    purchases
            GROUP   BY customerid
        ) b ON a.ID = b.customerID
        LEFT JOIN
        (
            SELECT  customerid, SUM(paymentamount) totalPayment
            FROM    payments
            GROUP   BY customerid
        ) c ON a.ID = c.customerID
WHERE   COALESCE(b.totalPurchase , 0) - COALESCE(c.totalPayment , 0) > 0

谢谢JW。但是,当我尝试使用while($row1=mysqli_fetch_assoc($q1))显示结果时,它几乎可以正常工作,然后$row1['totalPurchase']和$row1['totalPayment']都返回0。有什么想法吗?当客户没有
购买
表或
付款
表的记录时,它将返回
0
。你能提供样品记录吗<代码>:)谢谢。我不知道如何发布代码片段,但你是正确的-在很多情况下,客户总是会购买,但可能已经支付了任何款项。但是,我的报告显示,所有客户的购买和付款均为0,即使他们同时拥有这两个实例。谢谢看这个例子,它解决了演示问题!上面的答案在最初的选择中没有COALESCE(b.totalPurchase,0)totalPurchase和COALESCE(c.totalPayment,0)totalPayment。我把这些都加进去了,现在可以用了。谢谢你的帮助:)