加入3个表并在MySQL中添加总列

时间:2017-12-07 04:47:10

标签: mysql sql

我在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;

2 个答案:

答案 0 :(得分:1)

尝试以下操作(LEFT JOINIFNULL

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;