使用来自另一个表

时间:2017-12-13 17:45:04

标签: mysql sql database

我有两个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

1 个答案:

答案 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;
相关问题