左边连接3个表mysql

时间:2015-07-04 12:20:35

标签: c# mysql join

我的数据库中有3个表 enter image description here

我希望从bill_Details表中检索所有产品及其数量。 这是查询:

SELECT p.prod_Id,p.prod_Name,COALESCE(sum(b.de_Quantity+b.de_Bonus),0)
,p.prod_Cost,p.prod_ExpDate,p.prod_BonusInfo,p.prod_Note 
FROM (products p
LEFT JOIN bill_Details b 
ON p.prod_Id=b.prod_Id) 
LEFT JOIN bills a 
ON b.bill_Id = a.bill_Id and a.cus_Sup=1 and a.archived=0  
GROUP BY p.prod_Id, p.prod_Name,p.prod_Cost,p.prod_ExpDate,p.prod_BonusInfo,
p.prod_Note 
ORDER BY p.prod_Name asc

问题是当a.cus_Sup = 1或a.cus_Sup = 0时,此查询检索相同的数量! 知道当a.cus_Sup = 0数量应为0时,当a.cus_Sup = 1时,它对于特定产品是29.5。

这是数据: enter image description here

1 个答案:

答案 0 :(得分:0)

以下查询适用于您的情况。

SELECT p.prod_id, 
       p.prod_name, 
       COALESCE(Sum(b.de_quantity + b.de_bonus), 0), 
       p.prod_cost, 
       p.prod_expdate, 
       p.prod_bonusinfo, 
       p.prod_note 
FROM   products p 
       LEFT JOIN (SELECT bd.* 
                  FROM   bill_details bd 
                         JOIN bills a 
                           ON bd.bill_id = a.bill_id 
                  WHERE  a.cus_sup = 1 
                         AND a.archived = 0) b 
              ON p.prod_id = b.prod_id 
GROUP  BY p.prod_id, 
          p.prod_name, 
          p.prod_cost, 
          p.prod_expdate, 
          p.prod_bonusinfo, 
          p.prod_note 
ORDER  BY p.prod_name ASC