我的数据库中有一个 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/