Sql

Bem, como o assunto não é propriamente de Java então postei aqui.
Estou ficando louco para montar essa query, então se alguem ainda lembra dos comando SQL (falo isso pq muitos usam o Hibernate …rsss), mas a idéia é o seguinte.

Tenho 3 tabelas

:arrow: Loja
:arrow: Estoque
:arrow: Venda

Oque há em comum nas 3 tabelas e que pode ser usado como referencia é o código do loja e a tabela Estoque e Vendas possui o código do produto.

Então eu quero fazer o seguinte

Quero juntar as 3 tabelas .

Pro exemplo quando eu fazer um select para saber a posição de estoque para que me retorne algo assim

Loja.NomedoLoja | Estoque.QtdeEstoque | Venda.QtdeVenda

Porém haverá casos que não há informações de vendas, então eu quero que ele me retorne os valores de NomeLoja e QtdeEstoque mesmo os valores de Venda sendo “null” ou vazio.

Exemplo: Fazer um select e ele me retorne algo assim

Loja | Estoque | Venda Loja X 10 6 Loja Y 0 Loja Z 25 3

To ficando louco com tudo isso … será que alguem pode me ajudar …

Lembrando estou usando o MySQL 5 …

Falowww

Bom vou tentar te ajudar…


Select loja.NomedaLoja, estoque.QtdeEstoque, venda.QtdeVenda
from loja 
    left join estoque on loja.codigoloja = estoque.codigoloja
    left join venda on loja.codigoloja = vendas.codigoloja
where estoque.codigodoProduto = CODIGODOPRODUTO;

Faz alguns testes e se der erro post aqui…

Obrigado cara pela ajuda.

Porem não obtive sucesso. Não está retornando erro, mas não está retornando os valores da forma que eu quero.

Quando eu dou um Left Join em duas tabelas, por exemplo loja e estoque … funciona … porem quando ou dou um left join nas 3 … o valores retornam errados … por exemplo.
Usando um left join em duas tabelas …

SELECT l.nomeLoja,e.codigoProduto,e.qtdeEstoque FROM lojas l LEFT JOIN estoque e ON l.codigoLoja = e.codigoLoja WHERE e.dataEstoque = '8/5/2007' AND l.nomeLoja = 'ANCHIETA' AND e.codigoProduto= '07898332690272'

Isso retorna legalzinho … inclusive se eu não especificar o codigo do produto. Então ele me retorna todos os produtos e sua descrição referente àquela loja. Retornando assim:

Loja	     codProduto	QtdeAtual
ANCHIETA	4073758	21,0
ANCHIETA	3236918	62,0
ANCHIETA	4073307	3,0
ANCHIETA	5133376	14,0
ANCHIETA	1423914	17,0
ANCHIETA	1834727	7,0
ANCHIETA	1837315	18,0
ANCHIETA	5779758	17,0

Oque eu quero fazer é do jeito que ele está me retornando acrescentar os dados da outra tabela que é a tabela venda … Tipo logo após a coluna QtdeAtual teria a coluna QtdeVendida, ai se não houver as informações, pq quando não há venda não vem informações … então pode acontecer de o produto x ter vendido 10 e outro nada …

Então qdo eu faço o outro left join … ai ele esta fazendo assim …

Loja	codProduto	QtdeAtual
ANCHIETA	4073758	21,0
ANCHIETA	4073758	62,0
ANCHIETA	4073758	3,0
ANCHIETA	4073758	14,0
ANCHIETA	4073758	17,0
ANCHIETA	1834727	7,0
ANCHIETA	1834727	18,0
ANCHIETA	1834727	17,0
ANCHIETA	1834727	1,0
ANCHIETA	1834727	0,0

Ele mostra um monte de vezes o mesmo produto … :shock:

Num sei o q ta acontecendo … :x

Bom você precisa da quantidade vendida de um produto, acho que você terá que fazer a soma das quantidades vendidas…que pode ser parciais…

por isso que ele retorna várias linhas com o mesmo produto…porque vendeu várias vezes, então está gravado em vários registros…

utilize o sum para somar a qtde de produtos e depois agrupe pelo nome da loja, código do produto e qtde em estoque com a cláusula “group by l.nomeLoja, e.codigoProduto, e.qtdeEstoque”

tenta o seguinte ± :


SELECT l.nomeLoja,e.codigoProduto,e.qtdeEstoque, sum( v.qtdeVendida )
  FROM vendas as v, lojas l
    LEFT JOIN estoque e ON l.codigoLoja = e.codigoLoja
  WHERE e.dataEstoque = '8/5/2007'
    AND l.nomeLoja = 'ANCHIETA'
    AND e.codigoProduto= '07898332690272'
  group by l.nomeLoja, e.codigoProduto, e.qtdeEstoque;

Só não sei se será necessário colocar um

" AND v.codigoProduto = '982342364' "

no SQL…

Espero que Ajude…

Até +.

Haaaaaa ta outro detalhe …

O tabela de estoque … tem o campo datadeestoque … assim como a tabela venda tem o campo datadevenda …

Então eu poderia dar um Left Join na tabela estoque com a tabela venda …

Ficando assim ? Left Joing estoque.data ON estoque.data = venda.data…

Acho que assim eu não preciso usar o sum … pq na verdade eu não quero a soma das vendas … apenas a vendas daquele dia … assim como o estoque daquele dia …

Alguma idéia como fazer isso ?

Olha só…

quando for fazer left join você colaca a tabela ante…

 estoque left join vendas on estoque.data = vendas.data 

outra coisa se você quer apenas as vendas do dia acredito que não precise fazer left join…mas apenas especificar que quer o dia atual…acrescentando…no seu select…


  AND estoque.dataEstoque = DIAATUAL;

Até +.

Cara valeu … não tenho mais tempo de mexer pq ja deu o meu horario …

Semana que vem eu retorno a mexer nisso aqui …

Obrigadão …

Inté …

Falou cara qualquer coisa me escreva…

Até +.