我想在交易日期之间输出库存,如果没有交易日期,它仍然应该在MySQL上显示库存系统的所有库存

我想在交易日期之间输出库存,如果没有交易日期,它仍然应该在MySQL上显示库存系统的所有库存,mysql,Mysql,我当前的查询: select stock.id, stock.name, sum(amount) from stock left join stock_detail on stock.id = stock_detail.stock_id where transact_at BETWEEN ('2018-06-15') and ('2018-06-16') group by stock.id 但它不会显示在库存明细表中没有条目的其他库存 表1:库存 id name 1 chicken

我当前的查询:

select stock.id, stock.name, sum(amount) from stock
left join stock_detail on stock.id = stock_detail.stock_id
where transact_at BETWEEN ('2018-06-15') and ('2018-06-16')
group by stock.id
但它不会显示在库存明细表中没有条目的其他库存

表1:库存

id   name
1    chicken
2    beef
3    pork
4    drink
表2:库存详情

id  stock_id    type    amount  transact_date   
1   1           in      1000    15/06/2018  
2   1           in      500     15/06/2018  
3   2           in      300     16/06/2018  
我想要输出

id      name       total_amount 
1       chicken    1500
2       beef       300
3       pork       0
4       drink      0

您必须将日期谓词从
WHERE
移动到
ON

select stock.id, stock.name, coalesce(sum(amount) , 0)
from stock
left join stock_detail 
   on stock.id = stock_detail.stock_id 
      and transact_date BETWEEN ('2018-06-15') and ('2018-06-16')
group by stock.id

@webdev很高兴我能帮忙。请接受这个或任何其他答案,如果它有助于解决您的问题。嗨@Giorgos Bestos哦,我还忘了一件事,如果我想添加“where sum(amount)>1000”怎么办?我尝试了,但我得到了一个无效的组函数select stock.id,stock.name,coalesce(sum(amount),0)from stock left join stock_detail on stock.id=stock_detail.stock_id,交易日期介于('2018-06-15')和('2018-06-16'),其中sum(amount)库存超过1000组。id@webdev您需要在
HAVING
子句中添加谓词:
。。。按stock.id分组,总和(金额)>1000