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

标签 mysql left-join

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

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

表结构

生产报告

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

产品

productid, productname
1, Skin cream
2, Peanut Oil
3, Bath Salts
4, Shampoo

我的页面使用一个 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'

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

Skin Cream, 1, 50
Peanut Oil, 2, 12
Bath Salts, 0, 0
Shampoo, 0, 0

不幸的是,我得到的只是前两行。我相信这是因为 WHERE 子句针对连接表中的列。如果是这样的话,这显然是我逻辑上的一个严重缺陷,但我不知道该怎么办。

有什么建议吗?

最佳答案

试试这个

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

关于mysql - 从一个表中选择条件在连接表中的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15896337/

相关文章:

mysql - 查询日历事件,即使当天没有任何事件

PHP 和正则表达式 : search for word in string

oracle - 从标准 SQL 到 Oracle 语法的转换

mysql - 完成数据或左表,然后加入连接

mysql - LEFT JOIN 删除行而不过滤原始表

mysql - 为什么这个查询不起作用?

mysql - 哪个更快 : Many rows or many columns?

Mysql,更新具有多条记录的列

php - 用户可以从我的来源获取我的数据库信息吗

MySQL JOIN 独立于 WHERE 子句