Update usando 2 tabelas

Firebird

31/05/2013

Boa Tarde, uso Delphi 7 x Firebird. Quero atualizar o estoque fisico, subtraindo os produtos vendidos, para isso tenho a tabela itens_vendas, onde estão os produtos vendidos e a tabela produtos, onde estão os produtos com suas quantidades, como seguem:

tabela itens_vendas tabela produtos
------------------- ---------------
NR_VENDA CDPRODUTO
DT_VENDA DCPRODUTO
CANCELADO VLPRODUTO
COD_ITEM_VENDA QTESTOQUE
COD_PROD QTMINIMA
QT_ITEM CDFORNECEDOR
VL_ITEM COD_PROD_PRECO
VL_TOTAL

Preciso atualizar o QTESTOQUE da tabela produto, diminuindo pelo QT_ITEM da tabela itens_vendas, desde que o campo CANCELADO seja igual a 'N', ou seja se sim, esse item da venda foi cancelado.
Alguma idéia?

Jaime
Jaime Daltoe

Jaime Daltoe

Curtidas 0

Respostas

Claudia Nogueira

Claudia Nogueira

31/05/2013

Se for fazer usando algum parâmetro como número da venda, poderia fazer assim:
UPDATE produtos
SET QTESTOQUE = QTESTOQUE - 
(SELECT SUM(IV.QT_ITEM) FROM itens_vendas iv WHERE (iv.cancelado = 'N') and (iv.cod_prod = produtos.cdproduto) and (nr.venda =:nr_venda))


Agora se for fazer somando todos os itens da tabela, pra somente rodar o script pra acertar o estoque, seria mais ou menos assim:
UPDATE produtos
SET QTESTOQUE = QTESTOQUE - 
(SELECT SUM(IV.QT_ITEM) FROM itens_vendas iv WHERE (iv.cancelado = 'N') and (iv.cod_prod = produtos.cdproduto))


Se não for isso, me avisa, pra eu ver onde errei.

GOSTEI 0
Jaime Daltoe

Jaime Daltoe

31/05/2013

Obrigado! deu certo e era a primeira opção que eu queria. Porém, agora tenho que resolver outro problema; eu coloquei dentro de uma SP e ela esta demorando uns 15 segundos pra atualizar.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

31/05/2013

NR_VENDA e COD_PROD são FK não itens_vendas?
Se não são, tem índice para esses dois campos?
GOSTEI 0
Jaime Daltoe

Jaime Daltoe

31/05/2013

Oa campos NR_VENDA e COD_PRO da tabela ITENS_VENDAS são FK e os dois tem indices.
GOSTEI 0
José

José

31/05/2013

Olá amigo Jaime, teve algum avanço no seu problema ou conseguiu soluciona-lo ?
GOSTEI 0
Jaime Daltoe

Jaime Daltoe

31/05/2013

Olá José Ricardo, não está tão lento, mas eu esperava uma melhor performance.
GOSTEI 0
POSTAR