选择一个客户的所有订单

时间:2014-09-13 07:49:19

标签: sql

我有三个表,ordersorders_detailscustomers。我需要一个客户为orders表选择订单,所以我这样做了

orders列:

id
customer_id
created
vat
discount
amount
paid

orders_details列:

id
order_id
cost
qty
product

我使用的SQL

SELECT 
    orders.*, 
    SUM(orders_details.qty*orders_details.cost) as amount, 
    SUM(orders_details.qty) AS qty 
FROM 
    orders, 
    orders_details, 
    customers 
WHERE 
    orders.customer_id = customers.id 
    AND orders_details.order_id = orders.id 
    AND orders.customer_id = 1

但我的错误数量为30而不是20,数量错误

2 个答案:

答案 0 :(得分:5)

如果要按订单汇总,则需要GROUP BY子句。您也should use proper JOIN syntax,可能会考虑使用别名来使查询更紧凑。

SELECT 
    o.*, 
    SUM(od.qty * od.cost) AS amount, 
    SUM(od.qty) AS qty 
FROM orders o
INNER JOIN orders_details od ON od.order_id = o.id
INNER JOIN customers c ON o.customer_id = c.id     -- not used, might be excluded
WHERE o.customer_id =1
GROUP BY o.id 

根据您使用的数据库系统,您可能需要在GROUP BY中包含o。*中引用的所有列:

GROUP BY o.id, o.customer_id, o.created, o.vat, o.discount, o.amount, o.paid

最后注意:由于您似乎没有使用customers表中的任何数据,因此您可能完全排除该表。

答案 1 :(得分:2)

您错过了GROUP BY条款,我猜这个条款应该在orders.id上。