1

データベースに Products テーブルと ProductionReport テーブルがあります。

ProductionReport テーブルは、各製品の週ごとの生産情報をキャプチャします。私のアプリはこの情報を報告します。

テーブル構造

制作報告

productionreportid、productid、日付、数量 1、1、2013
年 4 月 8 日、50
2、2、2013 年 4 月 8 日、12

製品

productid、productname
1、スキン クリーム
2、ピーナッツ オイル
3、バス ソルト
4、シャンプー

マイ ページでは、すべての製品 ( 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 句が原因だと思います。もしそうなら、明らかに私の論理の重大な欠陥ですが、どうすればよいかわかりません。

助言がありますか?

4

2 に答える 2

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句に移動

于 2013-04-09T08:02:45.580 に答える
0

DATE(pr.date) = '2013-04-08'pr.date が null の場合は一致しません。

次のようなものに変更できますpr.date is null or date(pr.date) = '2013-04-08'

于 2013-04-09T08:05:37.510 に答える