tabela 1
mesa 2
Saída esperada
Abrir | 2
Pendente | 0
Fechado | 0
em breve....
Eu tentei usar esta consulta abaixo
SELECT d.status , COUNT(*) num,e.name FROM table1 d cross join table 2 e group by name;
Que resultou em
Alguém pode me ajudar nisso.
Respostas:
5 para resposta № 1Você precisa de um Associação à esquerda. Esse tipo de junção mostra todas as linhas da tabela à esquerda, mesmo quando não existem linhas da tabela à direita.
select t2.name, count(t1.id)
from table2 as t2
left join table1 as t1 on t2.name = t1.status
group by t2.name
Observe que você precisa agregar em uma coluna de table1
para produzir o 0
desejado, daí a count(t1.id)
. count(*)
vai produzir 1
mesmo se não houver linha de table1
.
UMA junção cruzada como você tem em sua consulta, simplesmente cria um produto cartesiano das duas tabelas envolvidas, resultando em cada linha da tabela à esquerda unida a cada linha da tabela certa uma vez.