【发布时间】:2019-01-23 15:32:54
【问题描述】:
我想加入三个表来计算某个 (party_id) 的余额 = (purchase - payment):
- 派对(party_id、类型、名称)
- 采购(purchase_id、supplier_id、数量、费率、总计)
- 付款(payment_id、party_id、金额)
从该 id 购买的总金额 = 20,000,其总付款 = 15,000,因此其余额应为 = 5,000。使用此代码后:
SELECT
((sum(purchase.total)) - (sum(payments.amount))) AS Party_Balance
FROM
Purchase
INNER JOIN
Party
ON purchase.supplier_id = party.party_id
INNER JOIN
Payments
ON party.party_id = payments.party_id
WHERE
payments.party_id = enter_party_id;
输出不正确:1,000,245 而不是 5,000。
这就是我建立关系的方式,是否存在应该修复的关系?
【问题讨论】:
-
哪个ID?
WHERE子句或其他地方没有 id。所以你已经包括了每一次购买。尝试选择所有列(用于测试),它应该更清晰。 -
问题是与这些实体相关的基数是什么。假设您有很多购买付款,那么购买总额会出现多次,并且 sum 函数将返回错误的数字。我建议你
select *以了解sum实际处理的内容。 -
付款和购买都是与各方关系的多方面。这就是数据集如此庞大的原因。您应该执行两个聚合查询来汇总 Payments 和 Purchases GROUP BY party_id 和 supplier_id,然后将它们加入各方。
-
感谢您的回复。我
select *每条记录输出23次!这解释了输出中的大值,但现在我该如何解决这个问题?什么在复制它们?
标签: sql ms-access ms-access-2016