Clipper On Line • Ver Tópico - select c/ subquery e verificação de saldo em outra tabela
Página 1 de 1

select c/ subquery e verificação de saldo em outra tabela

MensagemEnviado: 04 Jul 2016 11:07
por paulomhouse
Bom dia a todos.

Tenho o select a abaixo que esta funcionando, porem muito lento.
Gostaria de saber da possibilidade de melhorar-la.

O Banco de dados é o POSTGRESql.

É um SELECT numa tabela de Requisição, mas que traz uma coluna(SELECT azul) como saldo que esta numa tabela de item de uma cotação.

Como eu não consegui verificar o resultado desta campo(SELECT azul), eu repeti no WHERE esta sub (SELECT vermelha).

select r.codigo,r.cod,descr,r.qtde,(select sum(qtde) from a19item group by req_cod having req_cod = r.codigo) as t
from a19req r left join titemg i on r.cod = i.codigo
where r.status='A' and r.qtde-(select sum(qtde) as qtsai from a19item t group by req_cod having req_cod = r.codigo) > 0 ;

Obrigado.

select c/ subquery e verificação de saldo em outra tabela

MensagemEnviado: 05 Jul 2016 13:11
por alxsts
Olá!

Seja bem-vindo ao Fórum Paulo!

Fiz algumas modificações no teu código, conforme mostrado abaixo. Como não tenho PostgreSQL instalado e nem as tabelas, não foi possível testar. Por favor, teste e informe se funcionou.
SELECT r.codigo
      ,r.cod,
      ,r.descr
      ,r.qtde 
      ,q.qtsai
  FROM a19req r
INNER JOIN (SELECT t.req_cod
                   ,SUM(t.qtde) as qtsai
               FROM a19item t
              WHERE t.req_cod = r.codigo
           GROUP BY t.req_cod ) as q
         ON r.codigo = q.req_cod
  LEFT JOIN titemg i
         ON r.cod = i.codigo
WHERE r.status = 'A'
   AND (r.qtde - q.qtsai) > 0
PS: Você faz JOIN na tabela titemg mas nenhuma coluna dela é usada. Não sei se é necessário para o teu objetivo. Certamente tem um custo de processamento que pode degradar a performance.

Para melhorar a legibilidade dos posts, sempre que postar código fonte faça-o entre as tags code. É só clicar no botão mostrado abaixo, existente na barra de ferramentas da tela "POSTAR UMA RESPOSTA".

select c/ subquery e verificação de saldo em outra tabela

MensagemEnviado: 05 Jul 2016 14:21
por paulomhouse
Ola Alexandre, obrigado pela recepção.

Pode me corrigir se necessário.

O Inner Join não servira porque eu preciso que que mesmo que não houver na tabela item ele me retornara 0, mas que apareça a Requisição que esta a LEFT.

O problema é que no seu exemplo,era algo que eu ja tinha tentado mas alguns campos não são reconhecidos: ,q.qtsai que vem do SUBSELECT SUM(qtde) as qtsai e da mesma forma na Clausula WHERE (r.qtde - q.qtsai).

Mas resolveu o problema com a geração de um index na tabela a19item.

Sugestão de um Site internacional, que assim como vocês, estão muito dispostos a colaborar, http://www.hmgforum.com.

Quanto aos códigos, da próxima vez formatarei conforme você orientou.

Muitíssimo obrigado.

select c/ subquery e verificação de saldo em outra tabela

MensagemEnviado: 07 Jul 2016 08:10
por paulomhouse
Bom dia.

Mais uma vez obrigado, não somente a quem postou, mas também a quem verificou a msg. pensando em responder.