我有这些表
/*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
我需要生成一份报告来检查订单是否已完全发货
我希望使用左连接而不是subquerys(只是为了检查:它更有效吗?)
如果我问
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
那是因为左连接会将Orders.quantity复制三次 对于order_id = 1(因为对于order_id = 1,有3次发货)
如何在不使用子查询的情况下获得此结果?
order_id | orderered | shipped
1 | 17 | 17
2 | 5 | 5
3 | 5 | 5
答案 0 :(得分:2)
如果有序/数量是order_id
的属性,那么只需选择它并group by
SELECT
Orders.order_id,
Orders.quantity as ordered,
sum(Shipments.quantity_shipped) as shipped
FROM
Orders
LEFT JOIN Shipments ON Orders.order_id = Shipments.order_id
GROUP BY Orders.order_id,orders.quantity