Por uma dessas view abre rápido e a outra demora tanto?

Firebird

25/03/2004

Minha necessidade: preciso criar uma view, como na opção 2 abaixo. Ela funciona só que demora uma eternidade para abrir a query cuja instrução SQL é ´SELECT PRODUTO, SUM(ENTRADAS), SUM(SAIDAS) FROM VIEWMOVIESTOQUE2 GROUP BY PRODUTO´. Mas, se eu fizer a mesma instrução, usando a opção/view 1 ´´SELECT PRODUTO, SUM(ENTRADAS), SUM(SAIDAS) FROM VIEWMOVIESTOQUE GROUP BY PRODUTO´ não demora nada.
O que poderia ser que demora tanto? Como poderia fazer para carregar a descrição do produto sem que demore tanto?
Uso BD Firebird
Obrigado.

CRIAÇÃO DE VIEW - OPÇÃO 1

CREATE VIEW VIEWMOVIESTOQUE(PRODUTO, DATA, OPERACAO, ENTRADAS, SAIDAS) AS
SELECT PRODUTO, DATA, OPERACAO,
CAST (0 AS NUMERIC (18,3))AS ENTRADAS,
CAST(QUANTIDADE AS NUMERIC(18,3)) AS SAIDAS
FROM MOVIESTOQUE WHERE OPERACAO = ´E´
UNION ALL
SELECT PRODUTO, DATA, OPERACAO,
CAST(QUANTIDADE AS NUMERIC (18,3))AS SAIDAS,
CAST(0 AS NUMERIC(18,3)) AS ENTRADAS
FROM MOVIESTOQUE WHERE OPERACAO = ´S´


CRIAÇÃO DE VIEW - OPÇÃO 2

CREATE VIEW VIEWMOVIESTOQUE2 (DESCRICAO, PRODUTO, DATA, OPERACAO, ENTRADAS, SAIDAS) AS
SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO,
CAST (0 AS NUMERIC (18,3))AS ENTRADAS,
CAST(QUANTIDADE AS NUMERIC(18,3)) AS SAIDAS
FROM MOVIESTOQUE MOV, PRODUTOS PROD WHERE OPERACAO = ´E´
UNION ALL
SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO,
CAST(QUANTIDADE AS NUMERIC (18,3))AS SAIDAS,
CAST(0 AS NUMERIC(18,3)) AS ENTRADAS
FROM MOVIESTOQUE MOV, PRODUTOS PROD WHERE MOV.OPERACAO = ´S´


Valdirdill

Valdirdill

Curtidas 0

Respostas

Afarias

Afarias

25/03/2004

O problema na Opção 2 é q vc tem 2 tabelas (MOVIMENTOS E PRODUTOS) e não estabeleceu uma relação entre elas (JOIN)


T+


GOSTEI 0
Valdirdill

Valdirdill

25/03/2004

Você poderia me ajudar a fazer isso, ou seja, estabelecer esse join? Como ficaria a segunda instrução?
Obrigado

O problema na Opção 2 é q vc tem 2 tabelas (MOVIMENTOS E PRODUTOS) e não estabeleceu uma relação entre elas (JOIN) T+



GOSTEI 0
Afarias

Afarias

25/03/2004

CREATE VIEW VIEWMOVIESTOQUE2 (DESCRICAO, PRODUTO, DATA, OPERACAO, ENTRADAS, SAIDAS) AS 
SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO, 
CAST (0 AS NUMERIC (18,3)) AS ENTRADAS, 
CAST(MOV.QUANTIDADE AS NUMERIC(18,3)) AS SAIDAS 
FROM MOVIESTOQUE MOV
INNER JOIN PRODUTOS PROD ON (PROD.CODIGO=MOV.PRODUTO)
WHERE MOV.OPERACAO = ´E´ 

UNION ALL

SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO, 
CAST(MOV.QUANTIDADE AS NUMERIC (18,3))AS SAIDAS, 
CAST(0 AS NUMERIC(18,3)) AS ENTRADAS 
FROM MOVIESTOQUE MOV
INNER JOIN PRODUTOS PROD ON (PROD.CODIGO=MOV.PRODUTO)
WHERE MOV.OPERACAO = ´S´



T+


GOSTEI 0
Valdirdill

Valdirdill

25/03/2004

Value Afarias. Funcionou que é um brinco.
Obrigadíssimo.

CREATE VIEW VIEWMOVIESTOQUE2 (DESCRICAO, PRODUTO, DATA, OPERACAO, ENTRADAS, SAIDAS) AS 
SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO, 
CAST (0 AS NUMERIC (18,3)) AS ENTRADAS, 
CAST(MOV.QUANTIDADE AS NUMERIC(18,3)) AS SAIDAS 
FROM MOVIESTOQUE MOV
INNER JOIN PRODUTOS PROD ON (PROD.CODIGO=MOV.PRODUTO)
WHERE MOV.OPERACAO = ´E´ 

UNION ALL

SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO, 
CAST(MOV.QUANTIDADE AS NUMERIC (18,3))AS SAIDAS, 
CAST(0 AS NUMERIC(18,3)) AS ENTRADAS 
FROM MOVIESTOQUE MOV
INNER JOIN PRODUTOS PROD ON (PROD.CODIGO=MOV.PRODUTO)
WHERE MOV.OPERACAO = ´S´
T+



GOSTEI 0
POSTAR