Unir 3 tabelas
05/05/2016
0
Tenho 3 tabelas e gostaria de unir elas para mostrar em um Grid e depois imprimir um relatório.
(vou simplificar)
1º Tabela Cliente:
- id
- nome
2º Tabela Entrada:
- idCliente
- idProduto
- data
- quantidade_entrada
- valorUnitario
3º Tabela Saída:
- id_cliente
- id_produto
- data
- quantidade_saida
- valorUnitario
Explicando: Isso é um controle de estoque, o cliente compra uma quantia de tal produto X isso é uma entrada e
ao decorrer ele vai gastando este produto, então gera uma saída.
Quero mostrar no grid quando ele fez uma entrada e quando ele fez uma saída, a linha de entrada terá uma cor verde
e a linha de saida terá uma cor vermelha.
Quero q o grid fique assim:
1 registro:
Nome Cliente: Taltal
Produto: Botão
Data: 05/05/2016
Quantidade: 5000
Valor UNitario: R$4,50
COR VERDE (Entrada)
2 registro:
Nome Cliente: Taltal
Produto: Botão
Data: 06/05/2016
Quantidade: 2000
Valor Unitario: R$4,50
COR VERMELHA (SAIDA)
Tentei utilizar Union, mas gostaria de pegar o nome do cliente. Alguma sugestão??
SELECT E.data, E.quantidade, E."valorUnitario", E."valorTotal" FROM Entrada AS e WHERE E."idCliente" = 1 and E."idProduto" = 1 UNION ALL SELECT S.data, S.quantidade, S."valorUnitario", S."valorTotal" from Saida S WHERE S."idCliente" = 1 and S."idProduto" = 1
Leonardo Couy
Posts
06/05/2016
Joel Rodrigues
06/05/2016
Leonardo Couy
por exemplo, eu quero que fique assim:
id - nome_cliente - quantidade - p_unitario
e usando inner join fica assim:
id - nome_cliente - quantidade_entrada - p_unitario_entrada - quantidade_saida - p_unitario_saida
Estou pensando em criar 1 tabela com os mesmos dados da entrada e saída, e colocar um campo char chamado "Tipo" e quando for Entrada, eu coloco E e quando for Saída coloco S. Creio que será mais fácil de manipular.
06/05/2016
Joel Rodrigues
Para o tipo de registro, nao precisa de uma nova tabela, basta adicionar esse campo na consulta, por exemplo:
..., 'E' as Tipo
..., 'S' as Tipo
06/05/2016
Douglas Santos
Exemplo de uso
SELECT C.*, E.*, S.* FROM cliente C INNER JOIN entrada E ON c.idCliente = e.idCliente INNER JOIN saida S ON c.idCliente = s.idCliente
Se acaso existir uma categoria de entrada e saída com referência no cliente você usa o GROUP BY c.idCliente, e se precisar usar uma condição vc usar o HAVING que funciona da mesma forma que cláusula WHERE
Se acaso vc tenha campos com o mesmo nome em ambas as tabelas alem do campos de referência, vc precisa fazer com o SQL nomeie esse campos com outro nome exemplo
Tabela 1
Produto
Quantidade
Valor unitario
Tabela 2
Produto
Quantidade
Valor unitario
Repare que em ambas as tabelas possuem os mesmos campos, então vc precisa nomea-los com nome distintos para que não acha confusão ao ler ambos os dados.
Vc pode nomea-los diretamente no Banco de dados ou use a cláusula AS para nomea-la sem altera-la fisicamente exemplo
Nomeando os nomes dos campos da tabela entrada.
SELECT E.produto AS eProduto, E.quantidade AS eQts, E.valorUnitario AS eValorUnitario,
Nomeando os nomes dos campos da tabela saída
S.produto AS sProduto, S.quantidade AS sQts, S.valorUnitario AS sValorUnitario
Você não precisa nomear ambas as tabelas , basta apenas nomear os campos de uma e pronto, voce usa no loop os campos nomeados e os campos da outra tabela que não foram nomeados.
Espero que tenha te ajudado
Clique aqui para fazer login e interagir na Comunidade :)