mysql 用总和连接 3 个表给出错误的结果

Ahs*_*san 3 mysql database join sum

我一直在尝试使用 3 个表格制作资产负债表。第一个表是供应商名称。第二个表是应付供应商,第三个表是支付给供应商,两者都与供应商表的外键相连。

我期待这样的结果:

供应商名称----------------------- 到期------------------------ - - - - 支付

name------------------- sum (数量*单价) ------------------sum (支付金额)

我的查询是

SELECT 
    tbl_supplier.supplier_name AS supplier,
    SUM(tbl_payment.pay_amount) AS payment,
    SUM(tbl_stock.stock_qnt * tbl_stock.stock_up) AS due
FROM
    tbl_supplier
        INNER JOIN
    tbl_payment ON tbl_supplier.id = tbl_payment.supplier_id
        INNER JOIN
    tbl_stock ON tbl_supplier.id = tbl_stock.supplier_id
GROUP BY supplier_name
Run Code Online (Sandbox Code Playgroud)


但结果是到期金额乘以付款数量,反之亦然。

例如,如果供应商的应付总额为 1000,并且他已收到 3 次付款,则显示的应付总额为 3000,而不是 1000。

请帮忙。谢谢

Sol*_*are 5

你不能join存货和付款表。在join将每一行的结合tbl_payment,在每排tbl_stock3行中,所以tbl_payment,你会得到1个原始行中tbl_stock3次,再总结了这些。Distinct不是一个解决方案,因为它会忽略不明显的值,例如,如果您实际上有 2 次支付 100 美元,那么您将有不同的 100 美元总和(因为 100 美元和 100 美元是相同的值)。

您可以使用subquerys单独计算的款项(这是一个隐含jointbl_suppliertbl_paymenttbl_suppliertbl_stocks,但不是所有的三个个人在一起):

SELECT 
   tbl_supplier.supplier_name AS supplier,
   (select sum(tbl_payment.pay_amount) 
    from tbl_payment 
    where tbl_payment.supplier_id = tbl_supplier.id) as payment,
   (select sum(tbl_stock.stock_qnt * tbl_stock.stock_up) 
    from tbl_stock
    where tbl_stock.supplier_id = tbl_supplier.id) as due
from tbl_supplier;
Run Code Online (Sandbox Code Playgroud)