2016-08-08 31 views
-1

我有这样显示左起所有行加入

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”行?

+1

添加表定义。 (并限定列,即tablename.columnname(就像viaturas.transportador。) – jarlh

回答

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); 
+0

此查询有它并不显示我想要的所有行,并将所有结果放在'Sem transportador'行。 如果我删除左连接后的条件显示我想要的行,但我需要我的查询条件 – edbird88

+0

编辑您的问题; 1)添加表定义。 2)添加样品表数据。 )向我们显示当前查询的结果(使用样本数据)。4)向我们展示预期结果。 – jarlh