Update usando 2 tabelas
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
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
Curtidas 0
Respostas
Claudia Nogueira
31/05/2013
Se for fazer usando algum parâmetro como número da venda, poderia fazer assim:
Agora se for fazer somando todos os itens da tabela, pra somente rodar o script pra acertar o estoque, seria mais ou menos assim:
Se não for isso, me avisa, pra eu ver onde errei.
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
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
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?
Se não são, tem índice para esses dois campos?
GOSTEI 0
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é
31/05/2013
Olá amigo Jaime, teve algum avanço no seu problema ou conseguiu soluciona-lo ?
GOSTEI 0
Jaime Daltoe
31/05/2013
Olá José Ricardo, não está tão lento, mas eu esperava uma melhor performance.
GOSTEI 0