【发布时间】:2017-07-12 14:47:14
【问题描述】:
我有这些表
/*OrderRows*/
order_id | row_id | article | quantity
1 | 1 | pen | 10
1 | 2 |scissors | 7
2 | 3 | book | 5
3 | 4 | pen | 5
/*Shipments*/
shipment_id | row_id | quantity_shipped
1 | 1 | 3
2 | 1 | 4
3 | 1 | 3
4 | 2 | 7
5 | 3 | 5
6 | 4 | 5
我需要生成一份报告来检查订单是否已全部发货
我希望使用左连接而不是子查询(只是为了检查:它是否更有效?)
如果我问
SELECT
OrderRows.order_id,
sum(OrderRows.quantity) as ordered,
sum(Shipments.quantity_shipped) as shipped
FROM
Orders
LEFT JOIN Shipments ON OrderRows.row_id = Shipments.row_id
GROUP BY OrderRows.order_id
我显然得到了
order_id | orderered | shipped
1 | 27 | 17
2 | 5 | 5
3 | 5 | 5
那是因为让 left join 将 Orders.quantity 复制了三遍 for order_id = 1(因为 order_id = 1 有 3 批货)
如何在不使用子查询的情况下获得它?
order_id | orderered | shipped
1 | 17 | 17
2 | 5 | 5
3 | 5 | 5
【问题讨论】:
标签: mysql select sum left-join