Por que tanto tempo para abrir uma query?
A instrução SQL abaixo funciona blz. Só que demora demais para carregar, e são poucos os registros.
O que poderia ser? Uso Firebird.
Obrigado
SELECT PRODUTOS.CODIGO,
PRODUTOS.DESCRICAO as DESCRPRODUTO,
(Select sum (MOVIESTOQUE.QUANTIDADE)
from MOVIESTOQUE
Where MOVIESTOQUE.OPERACAO = ´E´
and PRODUTOS.CODIGO = MOVIESTOQUE.PRODUTO) as SubTotalEntrada,
(Select sum (MOVIESTOQUE.QUANTIDADE)
from MOVIESTOQUE
Where MOVIESTOQUE.OPERACAO = ´S´
and PRODUTOS.CODIGO = MOVIESTOQUE.PRODUTO) as SubTotalSaida
from PRODUTOS
O que poderia ser? Uso Firebird.
Obrigado
SELECT PRODUTOS.CODIGO,
PRODUTOS.DESCRICAO as DESCRPRODUTO,
(Select sum (MOVIESTOQUE.QUANTIDADE)
from MOVIESTOQUE
Where MOVIESTOQUE.OPERACAO = ´E´
and PRODUTOS.CODIGO = MOVIESTOQUE.PRODUTO) as SubTotalEntrada,
(Select sum (MOVIESTOQUE.QUANTIDADE)
from MOVIESTOQUE
Where MOVIESTOQUE.OPERACAO = ´S´
and PRODUTOS.CODIGO = MOVIESTOQUE.PRODUTO) as SubTotalSaida
from PRODUTOS
Valdirdill
Curtidas 0
Respostas
Lucas Silva
24/03/2004
Talvez seu banco de dados possa está corrompído.
Dê uma olhada no fórum de interbase, que lá tem a explicação de como reparar um BD!
Dê uma olhada no fórum de interbase, que lá tem a explicação de como reparar um BD!
GOSTEI 0
Rômulo Barros
24/03/2004
Quais os componentes q tais utilizando? É da paleta DBExpress ?
GOSTEI 0
Emerson Nascimento
24/03/2004
tente utilizar ´apelidos´ para suas tabelas. acho que pode estar havendo uma confusão devido ao uso da mesma tabela 2 vezes com o mesmo nome.
tente alterar para:
SELECT PROD.CODIGO, PROD.DESCRICAO as DESCRPRODUTO,
        (Select sum (MOV_E.QUANTIDADE)
          from MOVIESTOQUE MOV_E
          Where MOV_E.OPERACAO = ´E´
          and MOV_E.PRODUTO = PROD.CODIGO) as SubTotalEntrada,
        (Select sum (MOV_S.QUANTIDADE)
          from MOVIESTOQUE MOV_S
          Where MOV_S.OPERACAO = ´S´
          and MOV_S.PRODUTO = PROD.CODIGO) as SubTotalSaida
from PRODUTOS
where....
ou:
SELECT PROD.CODIGO, PROD.DESCRICAO DESCRPRODUTO,
          sum(MOV_E.QUANTIDADE) SubTotalEntrada,
          sum(MOV_S.QUANTIDADE) SubTotalSaida,
from PRODUTOS PROD
left join MOVIESTOQUE MOV_E on (MOV_E.PRODUTO = PROD.CODIGO AND MOV_E.OPERACAO = ´E´)
left join MOVIESTOQUE MOV_S on (MOV_S.PRODUTO = PROD.CODIGO AND MOV_E.OPERACAO = ´S´)
where.....
group by PROD.CODIGO
tente alterar para:
SELECT PROD.CODIGO, PROD.DESCRICAO as DESCRPRODUTO,
        (Select sum (MOV_E.QUANTIDADE)
          from MOVIESTOQUE MOV_E
          Where MOV_E.OPERACAO = ´E´
          and MOV_E.PRODUTO = PROD.CODIGO) as SubTotalEntrada,
        (Select sum (MOV_S.QUANTIDADE)
          from MOVIESTOQUE MOV_S
          Where MOV_S.OPERACAO = ´S´
          and MOV_S.PRODUTO = PROD.CODIGO) as SubTotalSaida
from PRODUTOS
where....
ou:
SELECT PROD.CODIGO, PROD.DESCRICAO DESCRPRODUTO,
          sum(MOV_E.QUANTIDADE) SubTotalEntrada,
          sum(MOV_S.QUANTIDADE) SubTotalSaida,
from PRODUTOS PROD
left join MOVIESTOQUE MOV_E on (MOV_E.PRODUTO = PROD.CODIGO AND MOV_E.OPERACAO = ´E´)
left join MOVIESTOQUE MOV_S on (MOV_S.PRODUTO = PROD.CODIGO AND MOV_E.OPERACAO = ´S´)
where.....
group by PROD.CODIGO
GOSTEI 0
Ilopaiz
24/03/2004
Acho q o problema pode ser de falta de índices... veja quais campos vc está usando para selecionar a tabela e crie índice para cada um deles.... eu tinha uma consulta q demorava quase 10 minutos e com os índices certos passou a demorar 40 segundos....
GOSTEI 0
Weber
24/03/2004
Não é aconselhavel colocar um Select dentro de outro Select (se bem que eu faço isso sempre)
Vamos interpretar seu Select.
Veja bem o que acontece, para cada produto da tabela Produtos são feitos mais dois Select na tabela MoviEstoque. Dessa forma se você 100 produtos são feitos 200 select´s na Tabela MoviEstoque. É por isso que acaba ficando lento.
Vamos interpretar seu Select.
SELECT PRODUTOS.CODIGO, PRODUTOS.DESCRICAO as DESCRPRODUTO, (Select sum (MOVIESTOQUE.QUANTIDADE) from MOVIESTOQUE Where MOVIESTOQUE.OPERACAO = ´E´ and PRODUTOS.CODIGO = MOVIESTOQUE.PRODUTO) as SubTotalEntrada, (Select sum (MOVIESTOQUE.QUANTIDADE) from MOVIESTOQUE Where MOVIESTOQUE.OPERACAO = ´S´ and PRODUTOS.CODIGO = MOVIESTOQUE.PRODUTO) as SubTotalSaida from PRODUTOS
Veja bem o que acontece, para cada produto da tabela Produtos são feitos mais dois Select na tabela MoviEstoque. Dessa forma se você 100 produtos são feitos 200 select´s na Tabela MoviEstoque. É por isso que acaba ficando lento.
GOSTEI 0