Fórum Erro consulta 3 tabelas - estoque #31349

22/07/2009

0

tenho 3 tabelas prod_entrada, prod_inf, prod_saida

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

Vagner.oliveira

Responder

Posts

22/07/2009

Emerson Nascimento

não dá pra perceber onde está o erro porque você mostrou uma instrução filtrando os dados do dia 22/Julho/2009 e a outra filtrando os dados do dia 23/julho/2009


Responder

Gostei + 0

23/07/2009

Vagner.oliveira

Corrigido

tenho 3 tabelas prod_entrada, prod_inf, prod_saida 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-23´
ORDER BY ps.data_venda
LIMIT 0 , 30 
Só que me retorna com erros:
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 
Legenda: tab_clientes Abade cod_cli = 101 Ciclano cod_cli = 10 tab_fornecedores Empresa cod_emp = 2 Empresa 2 cod_emp = 4 Empresa 3 cod_emp = 1 tab_prod Mouse cod_prod = 1 cod_revenda = 1 a cod_prod = 1 cod_revenda = 4 Windows cod_prod = 1 cod_revenda = 2 Notem que o produto Windows não foi vendido, tentei diversas maneiras, mas não consegui resolver este problema



Responder

Gostei + 0

23/07/2009

Emerson Nascimento

continua confuso... na sua instrução você relaciona a tabela prod_inf, porém dá exemplo de conteúdo da tabela tab_prod...

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]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar