选择已售出和未售出的产品

时间:2014-01-13 17:16:41

标签: mysql sql select product

我正在尝试选择所有产品名称以及当前销售的产品数量,但我遇到了问题,因为并非所有产品都是每天销售的。 (当产品尚未售出时,必须返回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;

3 个答案:

答案 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

DEMO HERE

编辑:

如果您想使用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 

DEMO HERE

只需将此日期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