Unir 3 tabelas
Pessoal,
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??
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
Curtidas 1
Respostas
Joel Rodrigues
05/05/2016
Ola. Para isso, faça um inner join com a tabela de clientes.
GOSTEI 0
Leonardo Couy
05/05/2016
Olá Joel!! Obrigado pela resposta. Eu tentei pelo inner join, porém ele concatena as linhas da tabela entrada e saida.
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.
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.
GOSTEI 0
Joel Rodrigues
05/05/2016
Como você tem duas consultas unidas, deve fazer o inner join em cada uma delas separadamente e depois uni-mas. Ou seja, você vai fazer o join das entradas com clientes e depois das saídas com clientes. Em cada consulta você deve incluir o nome do cliente, para que seja possível fazer a união.
Para o tipo de registro, nao precisa de uma nova tabela, basta adicionar esse campo na consulta, por exemplo:
na entrada e
na saída.
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
GOSTEI 0
Douglas Santos
05/05/2016
Olá amigo vc so vai conseguir realizar essa consulta usando o Inner join, left join, ou right join
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
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
GOSTEI 0