从一个表中选择连接表中的条件的所有行

时间:2013-04-09 07:54:57

标签: mysql left-join

我的数据库中有一个Products表和一个ProductionReport表。

ProductionReport表捕获每种产品的每周生产信息。我的应用程序将报告此信息。

表格结构

ProductionReport

  

productionreportid,productid,date,qty
  1,1,2013-04-08,50   2,2,204-04-08,12

产品

  

productid,productname
  1,护肤霜
  2,花生油
  3,沐浴盐
  4,洗发水

我的页面使用gridview,列出所有产品(SELECT productid, productname FROM Products)并加入ProductionReport表,以显示用户可以更新的一周的所有产品和生产值的列表。

我的问题是填充GridView的SQL查询。它目前只获取两个表中都有连接值的行:

SELECT pro.productname, pr.productionreportid, IFNULL(pr.qty, 0) qty
FROM Products pro
LEFT JOIN ProductionReport pr ON pro.productid = pr.productid
WHERE DATE(pr.date) = '2013-04-08'

因此,鉴于上述数据,我希望得到以下结果集

  

护肤霜,1,50   花生油,2,12   沐浴盐,0,0   洗发水,0,0

不幸的是,我要回的只是前2行。我认为这是因为WHERE子句以连接表中的列为目标。如果是这样的话,这显然是我逻辑上的一个严重缺陷,但我不知道该怎么办。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

试试这个

  SELECT  
     pro.productname, 
     pr.productionreportid, 
     IFNULL(pr.qty, 0) qty
  FROM 
    Products pro  
  LEFT JOIN ProductionReport pr  
    ON pro.productid = pr.productid 
    AND DATE(pr.date) = '2013-04-08'

基本上将日期条件从WHERE子句移动到JOIN子句

答案 1 :(得分:0)

你是正确的,如果pr.date为空,DATE(pr.date) = '2013-04-08'将不匹配。

您可以将其更改为pr.date is null or date(pr.date) = '2013-04-08'