SQL加入吧?剩下 ?内?

时间:2015-07-02 11:23:51

标签: mysql

使用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)

提前致谢

2 个答案:

答案 0 :(得分:1)

大多数人发现left joinright join更容易理解。 left join的逻辑是保留第一个表中的所有行,以及其余表中的其他信息。所以,如果你想要所有客户,那么这应该是第一个表。

然后您将在第二张桌子上有条件。除第一个表之外的所有条件都应该在on子句而不是where。原因很简单:当没有匹配时,该值将为NULLwhere条件将失败。

所以,尝试这样的事情:

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