我正在尝试选择所有产品名称以及当前销售的产品数量,但我遇到了问题,因为并非所有产品都是每天销售的。 (当产品尚未售出时,必须返回0)
表产品
ID NAME
1 APPLE
2 PINEAPPLE
3 COFFE
表销售
ID DATE
1 2014-01-13
2 2014-01-13
TABLE PRODUCTS_AND_SALES
SALE_ID PRODUCT_ID AMOUNT
1 3 2
1 1 1
2 3 1
我期望得到什么:
PRODUCT AMOUNT
APPLE 1
PINEAPPLE 0
COFFE 3
我收到的内容:
PRODUCT AMOUNT
APPLE 1
COFFE 3
我的查询:
select product, sum(amount) from products
join products_and_sales using (product_id)
join sales using (sale_id)
where date(dt_sale) = curdate()
group by product_id;
答案 0 :(得分:2)
试试这个
select name as PRODUCT , ifnull(sum(AMOUNT),0) amount from products p
left join PRODUCTS_AND_SALES ps
on p.id = ps.PRODUCT_ID
group by product
编辑:
如果您想使用specefic日期,请使用此
select name as PRODUCT ,if(date = '2014-01-13' ,ifnull(sum(AMOUNT),0), 0 ) amount
from products p
left join PRODUCTS_AND_SALES ps on p.id = ps.PRODUCT_ID
left join SALES s on s.id = ps.SALE_ID
group by product
只需将此日期2014-01-13
替换为您想要的日期。 (curdate())或者什么
答案 1 :(得分:0)
使用OUTER JOIN代替INNER JOIN
如果您显示您使用的查询,我们会为您纠正。
答案 2 :(得分:0)
试试这个......
SELECT pr.NAME, IFNULL(SUM(prs.AMOUNT), 0)
FROM PRODUCTS pr
LEFT OUTER JOIN PRODUCTS_AND_SALES prs ON pr.id = prs.product_id
LEFT OUTER JOIN SALES sl ON sl.id = prs.sales_id AND date(s1.dt_sale) = curdate()
GROUP BY pr.NAME