Suponhamos que eu tenha uma tabela com os seguintes valores
TABELA 1
id
1
2
3
4
5
6
e outra tabela com os seguintes valores
TABELA 2
id valor
1 10
1 5
2 4
3 2
4 1
o que eu precisava produzir é
id soma
1 15
2 4
3 2
4 1
5 0
6 0
Ou seja, somar os valores da TABELA 2 organizados por id
, fiz a seguinte consulta SQL
:
SELECT
tabela1.id as id,
SUM(tabela2.valor) as soma
FROM
tabela1,tabela2
WHERE
tabela1.id = tabela2.id
GROUP BY tabela1.id
Porém o resultado é
id soma
1 15
2 4
3 2
4 1
Ou seja, 5 e 6 não aparecem. O que eu devo fazer, nesse caso?
Tente fazer conforme abaixo e veja se consegue o resultado que está esperando.
SELECT tabela1.id as id,
COALESCE(SUM(tabela2.valor),0) as soma
FROM tabela1
LEFT JOIN tabela2 ON(tabela1.id = tabela2.id)
GROUP BY tabela1.id;
2 curtidas
deu o mesmo resultado. não aparecem os ids 5, 6.
1 curtida
O que voc está fazendo com essa linha:
é equivalente a essa parte:
Isso é um INNER JOIN.
Com INNER JOIN, os valores precisam existir nas duas tabelas. Como os ids 5 e 6 nao existem na segunda tabela, eles nao aparecem no resultado.
O que você pode fazer, usando a forma que o @Jonathan_Medeiros postou, é usar um LEFT JOIN ao invés de um INNER JOIN.
Com o LEFT JOIN o resultado sempre aparecerá se ele existir na tabela a esquerda do JOIN, nesse caso tabela 1.
1 curtida
Por isso eu adoro esse forum.
Deu certo.
Muito obrigado a todos.
1 curtida
Não havia reparado na estrutura das tabelas dele, apenas havia me atentado na consulta, realmente com o INNER não vai funcionar, nesse caso o correto seria usar o LEFT, fiz a correção da resposta anterior.
1 curtida