我有一个客户表、订单表和付款表。
从这些中,我试图获取一个包含每条记录的表:客户#、订单#、应付余额。但如果客户没有订单,那么我只想列出客户#,其他字段的值为 NULL。
使用 LEFT JOIN,我可以仅使用客户#和订单#来完成此操作,但我也无法弄清楚如何获得其中的余额。我对 Mysql 相当陌生,尝试搜索答案但找不到。
以下内容仅适用于客户#和订单#:
SELECT
customers.cust_num,
orders.order_id
FROM customers
LEFT JOIN orders ON customers.cust_num = orders.cust_num
但我正在尝试将“orders.invoice_amount - SUM( payments.amount) AS Balance_due”合并为另一列,其中付款表通过两者中名为“order_id”的字段与订单表相关。
也许是这样的:
从付款、订单中选择订单.invoice_amount - SUM(付款.金额)作为balance_due,其中付款.order_id = 订单.order_id
知道我该如何去做或指出正确的方向吗?
最佳答案
执行额外的 LEFT JOIN,但针对按订单分组的付款进行子查询。因此,如果它在预查询结果中找到一条记录,那么就可以开始了。另外,我更改为使用表“别名”以缩短可读性,特别是当表名称很长,或者您必须在查询中多次联接到同一个表时。
SELECT
c.cust_num,
coalesce( o.order_id, 0 ) as Order_ID,
coalesce( o.invoice_amount, 0 ) as InvoiceAmount,
coalesce( Prepaid.TotalPaid, 0 ) as TotalPaid,
coalesce( o.invoice_amount - coalesce( PrePaid.TotalPaid, 0 ), 0) as BalanceDue
FROM
customers c
LEFT JOIN orders o
ON c.cust_num = o.cust_num
LEFT JOIN
( select
p.order_id,
sum( p.amount ) as totalPaid
from
payments p
group by
p.order_id ) as PrePaid
on o.order_id = PrePaid.order_id
关于Mysql 查询 : LEFT JOIN List all orders and "balance due" for a customer, 如果没有订单,则列出客户。 3 table ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37791335/