MySQL - Tratar consultas vazias entre várias tabelas
Tenho as seguintes tabelas:
Suponha que eu tenho o seguinte banco:
No meu relatório eu preciso buscar todos usuários que estão associados a empresa X, trazendo data e sum(valor) da tabela VENDA, caso tenha usuários associados e que não venderam nada, traga zero para cada uma dessas colunas. O mesmo ocorre em LOG, traga quantidade, data_ini e data_fim, caso NÃO TENHA registro, traga zero em suas colunas.
Agradeço desde já ;)
TAB.USUARIO [armazena todos clientes]
- id_usuario
- nome
- id_usuario
- nome
TAB.EMPRESA [armazena todas empresas]
- id_empresa
- nome
- id_empresa
- nome
TAB.ASSOCIADO [armazena apenas usuários e empresas que se associaram]
- id_associado
- fk_usuario
- fk_empresa
- id_associado
- fk_usuario
- fk_empresa
TAB.VENDA [armazena apenas quando algum usuário associado a determinada empresa realiza uma venda]
- id_venda
- data
- valor
- fk_usuario
- fk_empresa
- id_venda
- data
- valor
- fk_usuario
- fk_empresa
TAB.LOG [toda vez que ocorre uma venda, é atualizado essa tabela]
- id_log
- quantidade
- data_ini
- data_fim
- fk_usuario
- fk_empresa
- id_log
- quantidade
- data_ini
- data_fim
- fk_usuario
- fk_empresa
Suponha que eu tenho o seguinte banco:
TAB.USUARIO 1 --- João 2 --- Maria 3 --- José
TAB.EMPREA 1 --- aaa 2 --- bbb 3 --- ccc
TAB.ASSOCIADO [observe que dos 3 usuários, apenas 2 estão associados] 1 --- 1 --- 1 2 --- 2 --- 2
TAB.VENDA [observe que apenas 1 usuário associado vendeu duas vezes] 1 --- 27/07/2021 --- 50.00 --- 1 --- 1 2 --- 28/07/2021 --- 10.00 --- 1 --- 1
TAB.LOG 1 --- 2 --- 27/07/2021 --- 28/07/2021 --- 1 --- 1
No meu relatório eu preciso buscar todos usuários que estão associados a empresa X, trazendo data e sum(valor) da tabela VENDA, caso tenha usuários associados e que não venderam nada, traga zero para cada uma dessas colunas. O mesmo ocorre em LOG, traga quantidade, data_ini e data_fim, caso NÃO TENHA registro, traga zero em suas colunas.
Agradeço desde já ;)
Isabela
Curtidas 0
Melhor post
Emerson Nascimento
28/07/2021
algo assim:
SELECT TE.NOME EMPRESA, TU.NOME USUARIO, TV.DATA, COALESCE(SUM(TV.VALOR),0) VALORVENDA FROM TABUSUARIO TU INNER JOIN -- traz informações se houver dados dos dois lados (usuario e associado) TABASSOCIADO TA ON TA.FK_USUARIO = TU.ID_USUARIO INNER JOIN -- traz informações se houver dados dos dois lados (usuario, associado e empresa) TABEMPRESA TE ON TE.ID = TU.ID_EMPRESA = TA.FK_EMPRESA LEFT JOIN -- traz informações se houver dados ao menos do lado esquerdo (usuario, associado e empresa) mesmo que não tenha no direito (venda) TAB.VENDA TV ON TV.FK_USUARIO = TU.ID_USUARIO AND TV.FK_EMPRESA = TE.ID_EMPRESA WHERE TE.ID_EMPRESA = EMPRESA_DESEJADA GROUP BY TE.NOME EMPRESA, TU.NOME USUARIO, TV.DATA
GOSTEI 1
Mais Respostas
Isabela
28/07/2021
Muito obrigada Emerson Nascimento
GOSTEI 0