Fórum Erro consulta 3 tabelas - estoque #31349
22/07/2009
0
na minha tabela de saida estão os seguintes itens:
SELECT * FROM ´prod_saida´ WHERE data_venda = ´2009-07-23´ LIMIT 0 , 30
Que me retorna:
indicecod_prod cod_revendacod_clidata_vendaquantpreco_venda 14 1 4 101 2009-07-23 3 159.12 15 1 2 101 2009-07-23 5 93.60 16 10 1 10 2009-07-23 1 390.00
Então criei uma consulta SQL para trocar os valores dos códigos pelos nomes nas tabelas:
SELECT c.nome, pi.descricao, ps.quantidade, ps.data_venda, ps.preco_venda, f.razao FROM prod_saida ps INNER JOIN clientes c ON ps.cod_cli = c.codcli INNER JOIN prod_inf pi ON ps.cod_prod = pi.cod_prod INNER JOIN fornecedor f ON ps.cod_revenda = f.cod_revenda WHERE data_venda = ´2009-07-22´ ORDER BY ps.data_venda LIMIT 0 , 30
Só que me retorna com erros:
nome descricao quant data_venda preco_venda razao Carla Mouse 2 2009-07-22 37.44 Empresa 1 Carla Mouse 1 2009-07-22 53.04 Empresa2 LTDA Vagner Mouse 1 2009-07-22 18.72 Empresa 1 Vagner Monitor 19" 1 2009-07-22 365.04 Empresa 1 Carla a 2 2009-07-22 37.44 Empresa 1 Carla a 1 2009-07-22 53.04 Empresa2 LTDA Vagner a 1 2009-07-22 18.72 Empresa 1 Carla Windows 2 2009-07-22 37.44 Empresa 1 Carla Windows 1 2009-07-22 53.04 Empresa2 LTDA Vagner Windows 1 2009-07-22 18.72 Empresa 1
Legenda:
tab_clientes
Vagner cod_cli = 100
Carla cod_cli = 102
tab_fornecedores
Empresa 1 cod_revenda = 2
Empresa2 LTDA cod_revenda = 4
tab_prod
a cod_prod = 1 cod_revenda = 4
Windowscod_prod = 1 cod_revenda = 2
Mousecod_prod = 1 cod_revenda = 1
Monitor 19´cod_prod = 33 cod_revenda = 2
Notem que o produto Windows não foi vendido, tentei diversas maneiras, mas não consegui resolver este problema
Vagner.oliveira
Curtir tópico
+ 0Posts
22/07/2009
Emerson Nascimento
Gostei + 0
23/07/2009
Vagner.oliveira
SELECT * FROM ´prod_saida´ WHERE data_venda = ´2009-07-23´ LIMIT 0 , 30
indicecod_prod cod_revendacod_clidata_vendaquantpreco_venda 14 1 4 101 2009-07-23 3 159.12 15 1 2 101 2009-07-23 5 93.60 16 10 1 10 2009-07-23 1 390.00
SELECT c.nome, pi.descricao, ps.quantidade, ps.data_venda, ps.preco_venda, f.razao FROM prod_saida ps INNER JOIN clientes c ON ps.cod_cli = c.codcli INNER JOIN prod_inf pi ON ps.cod_prod = pi.cod_prod INNER JOIN fornecedor f ON ps.cod_revenda = f.cod_revenda WHERE data_venda = ´2009-07-23´ ORDER BY ps.data_venda LIMIT 0 , 30
nome descricao quantidade data_venda preco_venda razao AbadeMouse32009-07-23159.12Empresa 2 AbadeMouse52009-07-2393.60Empresa CiclanoPlaca de 12009-07-23390.00Empresa 3 Abadea32009-07-23159.12Empresa 2 Abadea52009-07-2393.60Empresa AbadeWindows32009-07-23159.12Empresa 2 AbadeWindows52009-07-2393.60Empresa
Gostei + 0
23/07/2009
Emerson Nascimento
bom, vamos lá...
você afirma que o produto ´Windows´ não foi vendido, porém na sua tabela de saídas existe a venda do código 1, e por isso são listados os produtos ´Windows´, ´a´ e ´Mouse´ (todos têm código 1).
pelo que eu entendi o problema se dá porque você tem vários produtos com o mesmo código, diferenciando-os pelo código do fornecedor.
para que funcione como você quer, é preciso fazer a filtragem pelo fornecedor na sua instrução:
[i:87dfac91e4]SELECT c.nome, pi.descricao, ps.quantidade, ps.data_venda, ps.preco_venda, f.razao
FROM prod_saida ps
INNER JOIN clientes c ON ps.cod_cli = c.codcli
INNER JOIN prod_inf pi ON ps.cod_prod = pi.cod_prod [b:87dfac91e4]and ps.cod_revenda = pi.cod_revenda[/b:87dfac91e4]
INNER JOIN fornecedor f ON ps.cod_revenda = f.cod_revenda
WHERE data_venda = ´2009-07-23´
ORDER BY ps.data_venda
LIMIT 0 , 30[/i:87dfac91e4]
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)