使用mySql我想列出客户在特定产品上所做的所有购买。
所以,我有3个表:客户(idCustomer,Name),cathegories(idCategory,CategoryName)和订单(idOrder,idCustomer,idCathegory,Qty,Price)
但我希望与所有客户一起上市。 不仅是那个购买了特定idCategory的人
我想的是:
select sum(Orders.Qty), Customers.Name
from Orders
right join Customers on Orders.idCustomer = Customer.idCustomer
where Orders.idCategory = 'Notebooks'
group by Orders.idCategory
但此语句仅列出Orders表中存在的客户的记录。 我想要他们所有人(没有购买的人,qty = 0)
提前致谢
答案 0 :(得分:1)
大多数人发现left join
比right join
更容易理解。 left join
的逻辑是保留第一个表中的所有行,以及其余表中的其他信息。所以,如果你想要所有客户,那么这应该是第一个表。
然后您将在第二张桌子上有条件。除第一个表之外的所有条件都应该在on
子句而不是where
。原因很简单:当没有匹配时,该值将为NULL
,where
条件将失败。
所以,尝试这样的事情:
select sum(o.Qty) as sumqty, c.Name
from Customers c left join
Orders o
on o.idCustomer = c.idCustomer and
o.idCategory = 'Notebooks'
group by c.Name;
最后,group by
应该与select
子句有关系。
答案 1 :(得分:0)
尝试此查询
select sum(Orders.Qty), Customers.Name
from Customers
right join Orders on Customer.idCustomer = Orders.idCustomer and Orders.idCategory = 'Notebooks'
group by Customers.Name