【问题标题】:left join with 3 tables mysql左加入 3 个表 mysql
【发布时间】:2015-09-22 02:32:57
【问题描述】:

我的数据库中有 3 个表

我想从 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。

这是数据:

【问题讨论】:

  • Try a where : 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 group by p.prod_Id,p.prod_Name,p.prod_Cost,p.prod_ExpDate,p .prod_BonusInfo, p.prod_Note 按 p.prod_Name asc 排序 where(a.cus_Sup=1 and a.archived=0)
  • @jdweng 我们不能在“group by”之后放置 where 子句。您的查询将不会执行。谢谢。

标签: c# mysql join


【解决方案1】:

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

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 

【讨论】:

  • 它将只检索在bill_Details中有外国记录的产品。
  • @BelalGhanem 根据要求编辑查询。
  • @BelalGhanem 我根据您之前的评论进行了更改。现在检查它是否有效。我只对同一篇文章进行了更改。请注意对这篇文章所做的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2011-02-01
相关资源
最近更新 更多