2013-04-09 81 views
1

我的数据库中有一个Products表和一个ProductionReport表。从连接表中的条件中选择一个表中的所有行

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

表结构

ProductionReport

productionreportid,产品ID,日期,数量
1,1,2013年4月8日,50
2,2,2013年4月8日,12

产品

产品ID,产品名称
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

试试这个

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子句

+0

怎么样......从来不知道你能做到这一点:)谢谢!完美工作 – Ortund 2013-04-09 08:08:49

+0

没问题:)干杯 – Stephan 2013-04-09 08:22:14

0

你处于一个DATE(pr.date) = '2013-04-08'正确的,如果pr.date为null,将不匹配。

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

相关问题