我在MySQL
数据库中有三个表
表1(vendors
)包含我的所有vendors
表2(puchaseorders
)包含我的所有purchaseorders
,并且公共列为'供应商'
表3包含来自这些订单的所有单个商品,其共同列为purchase_order
在供应商表中,我有一个历史平衡,我想将运行总计添加到。
这就是我现在所拥有的。它工作得很完美,但它只返回purchaseorders
表中的供应商。
我想返回vendor表中的所有供应商。如果没有“running_total”,则不对余额做任何事情。
SELECT *, vendors.balance + vend.running_total AS total FROM vendors
INNER JOIN
(SELECT vendor, SUM(orderhistory.qty_received *
orderhistory.estimated_price) AS running_total FROM orderhistory
INNER JOIN purchaseorders ON
orderhistory.purchase_order=purchaseorders.purchase_order
GROUP BY purchaseorders.vendor) AS vend ON vend.vendor=vendors.vendor;
答案 0 :(得分:1)
尝试以下操作(LEFT JOIN
和IFNULL
)
SELECT *, vendors.balance + IFNULL(vend.running_total,0) AS total
FROM vendors
LEFT JOIN
(
SELECT vendor, SUM(orderhistory.qty_received * orderhistory.estimated_price) AS running_total
FROM orderhistory
INNER JOIN purchaseorders ON orderhistory.purchase_order=purchaseorders.purchase_order
GROUP BY purchaseorders.vendor
) AS vend
ON vend.vendor=vendors.vendor;
答案 1 :(得分:1)
您可以将连接外部更改为左连接,并在vend.running_total
字段周围使用合并,以便在内部表中不存在时将其视为0,如果存在则将其视为非零值。试试:
SELECT *, vendors.balance + COALESCE(vend.running_total,0) AS total
FROM vendors
LEFT JOIN
(SELECT vendor, SUM(orderhistory.qty_received * orderhistory.estimated_price) AS running_total
FROM orderhistory INNER JOIN purchaseorders
ON orderhistory.purchase_order = purchaseorders.purchase_order
GROUP BY purchaseorders.vendor) AS vend
ON vend.vendor=vendors.vendor;