gpt4 book ai didi

mysql 用 sum 连接 3 个表给出了错误的结果

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:09 24 4
gpt4 key购买 nike

我一直在尝试使用 3 个表制作 Assets 负债表。第一张表是供应商的名称。第二张表是给供应商的,第三张表是给供应商的付款,两者都与供应商表的外键相关联。

我期待这样的结果:

supplier name----------------------- due------------------------------- payment

name------------------ sum (quantity*unitprice) ------------------sum (pay amount)

我的查询是

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


但结果是到期总和乘以付款次数,反之亦然。

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

请帮忙。谢谢

最佳答案

你不能join股票和支付表。 join将合并 tbl_payment 中的每一行tbl_stock 中的每一行,因此 tbl_payment 中有 3 行, 你会得到 tbl_stock 中的第一个原始行3次,然后对这些求和。 Distinct不是一个解决方案,因为它会忽略那些不明显的值,例如如果您实际上有 2 笔 100 美元的付款,您将得到不同的 100 美元(因为 100 美元和 100 美元是相同的值(value))。

您可以使用子查询分别计算总和(这是隐含的 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;

关于mysql 用 sum 连接 3 个表给出了错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38418652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com