Como utilizar Union?

Firebird

23/05/2006

Olá pessoal,

Pelo que entendi o Union ele pega todos os registros de um SQL e junta com outro.

O problema é que tenho o SQL1, retorna 10 registros.
Tenho o SQL2 que retorna 200 registros.

Eu coloco um Union tem que retornar 210 certo? O problema é que ele retorna algo tipo 55. Não entendi o que o union faz ou como ele funciona.

Obrigado.


Yallebr

Yallebr

Curtidas 0

Respostas

Jonas_giron

Jonas_giron

23/05/2006

Veja esse exemplo


SELECT ´Produtos´
, A.CODIGO
, A.DESCRICAO
, A.UN
, COALESCE(A.QUANTIA_ESTOQUE,0) AS QUANTIA_ESTOQUE
FROM PRODUTOS A
WHERE A.CODIGO BETWEEN :COD_INICIAL AND :COD_FINAL
UNION ALL
SELECT ´Prod_com´
, B.CODIGO_PRODUTO
, COALESCE(SUM(B.QUANTIA_COMPRA),0) AS QUANTIA_COMPRA
, COALESCE(AVG(B.VALOR_CUSTO_UNITARIO),0) AS CUSTO_MEDIO_UNITARIO
FROM PRODUTOS_NOTA_COMPRA B
WHERE B.CODIGO_PRODUTO BETWEEN :COD_INICIAL AND :COD_FINAL
AND B.DATA_NOTA_COMPRA BETWEEN :DATA_INICIAL AND :DATA_FINAL
UNION ALL
SELECT ´Prod_man´
, C.CODIGO_PRODUTO
, COALESCE(SUM(C.QUANTIA_MOVIMENTO),0) AS QUANTIA_MOVIMENTO
FROM PRODUTOS_MOVIMENTO C
WHERE C.CODIGO_PRODUTO BETWEEN :COD_INICIAL AND :COD_FINAL
AND C.DATA_MOVIMENTO BETWEEN :DATA_INICIAL AND :DATA_FINAL
GROUP BY A.CODIGO
, A.DESCRICAO
, A.UN
, A.QUANTIA_ESTOQUE
, B.CODIGO_PRODUTO
, B.QUANTIA_COMPRA
, B.VALOR_CUSTO_UNITARIO
, C.CODIGO_PRODUTO
, C.QUANTIA_MOVIMENTO


GOSTEI 0
Yallebr

Yallebr

23/05/2006

Obrigado.


GOSTEI 0
Orpolonio

Orpolonio

23/05/2006

Só uma sugestão:
Se vc trocar os unions por uma SP com a chamada where e usar PLAN seu rendimento aumentará muito.

Monte uma SP com parametros de chamadas, use o PLAN e no select ao inves de chamar as três tabelas chama a SP, veja que o PLAN com WHERE deixará sua chamada instantanea, com 200 registros vc n nota isso, e acrescentar alguns milhares verá a diferença.


GOSTEI 0
POSTAR