我有两个mysql表:
1. orders
+----+------+---------+
| id | name | address |
+----+------+---------+
| 1 | aaa | asd asd |
| 2 | bbb | sdf sdf |
| 3 | ccc | dfg dfg |
+----+------+---------+
2. order_intra
+----+----------+----------+-------+
| id | order_id | quantity | price |
+----+----------+----------+-------+
| 1 | 1 | 4 | 10 |
| 2 | 1 | 1 | 11 |
| 3 | 3 | 10 | 5 |
+----+----------+----------+-------+
第一个表是订单列表,第二个表是订购产品数量和价格列表(第二个表中的order_id是第一个表中的id)
我想构建结果表:
3. result
+----+------+---------+----------+
| id | name | address | ordersum |
+----+------+---------+----------+
| 1 | aaa | asd asd | 51 |
| 2 | bbb | sdf sdf | |
| 3 | ccc | dfg dfg | 50 |
+----+------+---------+----------+
ordersum 是具有与表1中相同的order_id的订单的所有数量*价格的总和。 但是有些订单是空的":我们在订单表中有它们,但在order_intra表中没有任何产品。
我跑了这个:
SELECT orders.*, SUM(order_intra.quantity*order_intra.price) AS ordersum
FROM orders, order_intra WHERE order_intra.order_id=orders.id
GROUP by orders.id
得到这个:
+----+------+---------+----------+
| id | name | address | ordersum |
+----+------+---------+----------+
| 1 | aaa | asd asd | 51 |
| 3 | ccc | dfg dfg | 50 |
+----+------+---------+----------+
订单号2丢失了! 如何更改我的查询以便其返回包含"空"订单吗 这是MCVE:http://sqlfiddle.com/#!9/6f0d488/2/0
编辑:我完成了这个:SELECT orders.*, sums.ordersum FROM orders
LEFT JOIN (SELECT order_id, SUM(order_intra.quantity*order_intra.price) AS ordersum
FROM order_intra GROUP BY order_id) AS sums ON orders.id=sums.order_id
GROUP BY orders.id
答案 0 :(得分:1)
像这样(LEFT JOIN ... ON
):
select orders.*,
sum(orders_intra.quantity*orders_intra.price) as ordersum
from orders left join orders_intra on orders_intra.order_id=orders.id
group by orders.id;