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

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

Discussão sobre SQL

Moderador: Moderadores

 

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

Mensagempor paulomhouse » 04 Jul 2016 11:07

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.
paulomhouse
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 10
Data de registro: 04 Jul 2016 10:39
Cidade/Estado: são paulo / SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

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

Mensagempor alxsts » 05 Jul 2016 13:11

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".
Anexos
Capturar.PNG
Botão Code
Capturar.PNG (6.39 KiB) Visualizado 617 vezes
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2176
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 13 vezes
Mens.Curtidas: 145 vezes

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

Mensagempor paulomhouse » 05 Jul 2016 14:21

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.
paulomhouse
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 10
Data de registro: 04 Jul 2016 10:39
Cidade/Estado: são paulo / SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

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

Mensagempor paulomhouse » 07 Jul 2016 08:10

Bom dia.

Mais uma vez obrigado, não somente a quem postou, mas também a quem verificou a msg. pensando em responder.
paulomhouse
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 10
Data de registro: 04 Jul 2016 10:39
Cidade/Estado: são paulo / SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro