我有这样的查询
SELECT IF(viaturas.transportador IS NULL,
'Sem transportador', viaturas.transportador) AS transportador,
SUM(IFNULL(retorno_euro,0))- SUM(IFNULL(devolucao_euro,0)) AS total_euro,
SUM(IFNULL(retorno_ddf,0))- SUM(IFNULL(devolucao_ddf,0)) AS total_ddf,
SUM(IFNULL(retorno_vadias_plast,0))- SUM(IFNULL(devolucao_vadias_plast,0)) AS total_plast
FROM transportes.transportation_order
LEFT JOIN transportes.viaturas ON viaturas.viatura=transportation_order.viatura
WHERE estado NOT IN ('cancelado', 'eliminado')
AND servico IN ('Distribuição', 'Devolução', 'Re-Entrega')
AND DATA >= '2016-08-08'
GROUP BY LOWER(transportador);
但仅显示匹配行的结果。 我怎样才能展示所有" tranportador"甚至在表之间没有匹配的情况下行?
答案 0 :(得分:1)
当LEFT JOIN
时,将右侧表条件放在ON
子句中以获得真正的LEFT JOIN
行为。 (在WHERE
条款中,您将获得定期INNER JOIN
结果。)
SELECT IF(viaturas.transportador IS NULL,
'Sem transportador', viaturas.transportador) AS transportador,
SUM(IFNULL(retorno_euro,0))- SUM(IFNULL(devolucao_euro,0)) AS total_euro,
SUM(IFNULL(retorno_ddf,0))- SUM(IFNULL(devolucao_ddf,0)) AS total_ddf,
SUM(IFNULL(retorno_vadias_plast,0))- SUM(IFNULL(devolucao_vadias_plast,0)) AS total_plast
FROM transportes.transportation_order
LEFT JOIN transportes.viaturas ON viaturas.viatura=transportation_order.viatura
AND estado NOT IN ('cancelado', 'eliminado')
AND servico IN ('Distribuição', 'Devolução', 'Re-Entrega')
AND DATA >= '2016-08-08'
GROUP BY LOWER(transportador);