2013-04-09 43 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'

相關問題