LEFT JOIN和WHERE子句 - 列出所有记录,即使是那些值为null的记录

时间:2017-07-04 10:56:36

标签: mysql left-join where-clause

目标是在网格上显示所有具有销售和价值的卖家列表。

即使没有销售,也应始终显示卖家列表。

类似的东西:

seller | sales | value
 John      10      1000
 Marie     20      2000
 Jamie     15      1500
 Arnold     0         0
 Peter      0         0

为此,下一个查询工作正常:

 SELECT tsl.sellers, 
       COUNT(ts.sales) AS sales,
       COALESCE(SUM(ts.value),0) AS value
 FROM tab_sellers tsl
 LEFT JOIN tab_sales ts ON  tsl.id_seller = ts.seller
 GROUP BY tsl.seller    

问题在于我需要按日期范围进行过滤。

 SELECT tsl.sellers, 
       COUNT(ts.sales) AS sales,
       COALESCE(SUM(ts.value),0) AS value
 FROM tab_sellers tsl
 LEFT JOIN tab_sales ts ON  tsl.id_seller = ts.seller
 WHERE ts.date_sale BETWEEN '2017-05-01' and '2017-07-04'
 GROUP BY tsl.seller 

考虑到只有John和Marie在此日期范围内有销售,结果是:

seller | sales | value
 John       5       500
 Marie     10      1000

但是,预期的结果是:

seller | sales | value
 John       5       500
 Marie     10      1000
 Jamie      0         0
 Arnold     0         0
 Peter      0         0

我很感激能够解决这个问题。

1 个答案:

答案 0 :(得分:2)

将条件置于And oprtation而不是where

尝试以下查询:

 SELECT tsl.sellers, 
       COUNT(ts.sales) AS sales,
       COALESCE(SUM(ts.value),0) AS value
 FROM tab_sellers tsl
 LEFT JOIN tab_sales ts ON  tsl.id_seller = ts.seller AND ts.date_sale BETWEEN '2017-05-01' and '2017-07-04'
 GROUP BY tsl.seller 

希望这对您有所帮助。