2014-09-13 58 views
0

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

orders列:

id 
customer_id 
created 
vat 
discount 
amount 
paid 

orders_details列:

id 
order_id 
cost 
qty 
product 

我用

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 
的SQL

但我得到3的错误数量0而不是20,金额是错的

+1

我想你应该使用GROUP BY上的orders.id – 2014-09-13 07:54:13

+3

[坏习惯踢:使用旧式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-习惯使用旧样式joins.aspx) - 旧式*逗号分隔的表*样式列表替换为ANSI - ** 92 *中的*适当的* ANSI'JOIN'语法* * SQL标准(**超过20年**前),其使用是不鼓励的 – 2014-09-13 08:34:14

回答

2

你错过了GROUP BY子句,我猜应该是orders.id

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

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

最后要注意:你似乎不使用任何来自客户表的数据可能会完全排除该表。

相关问题