LEFT JOIN demorando horas

07/11/2022

0

Estou precisando extrair umas informações do banco de dados mas as minha tabelas é muito grande e quando coloco o INNER JOIN me retornar os resultados em 1 minuto mas quando eu coloco o LELFT JOIN para trazer os campos mesmo vazio demorar mais de 6 horas para isso acontecer tem algum modo de eu melhorar meu código para rodar mar rápido ?

--EXTRAI DADOS DO PRODUTOS


WITH PRO AS (SELECT POU.PROCODIGO, POU.PRODESCRICAO, POU.TPLCODIGO,
POU.PROCODIGO2, M.MARNOME
FROM PRODU POU
INNER JOIN MARCA M ON POU.MARCODIGO = M.MARCODIGO
WHERE POU.prosituacao = 'A' and POU.protipo = 'E'),


-- EXTRAI INFORMAÇÃO DO D-1
DMU AS (Select distinct PO.procodigo AS PROCODIDMU,
CAST(sum(PO.PfPQtdade) AS Numeric(15)) as PfPQtdadeD1
from pfpro PO
inner join( select distinct * from pedfo
where PefSit = 'A'
and pedfo.empcodigo = 1
and pedfo.fiscodigo in ( '2.923', '2.101', '1.101', '1.152' )
and pedfo.pefpzentre BETWEEN '01.01.2022' AND 'NOW')
A on PO.id_pedido = A.id_pedido
where PO.empcodigo = 1 --AND P.procodigo = 'BOG70450'
group by 1) ,

-- EXTRAI INFORMAÇÕES DO D+5

DMC AS (SELECT DISTINCT
PP0.procodigo AS PROCODDMC,
CAST(sum(PP0.PfPQtdade) AS Numeric(15)) as PfPQtdadeD5
from pfpro PP0
inner join( select distinct * from pedfo
where PefSit = 'A'
and pedfo.empcodigo = 1
and pedfo.fiscodigo in ( '2.923', '2.101', '1.101', '1.152' )
and pedfo.pefpzentre >= '17.01.2022' and pedfo.pefpzentre
<= (current_date +5) )
A on PP0.id_pedido = A.id_pedido
where PP0.empcodigo = 1
group BY 1),




-- EXTRAI INFORMAÇOES DO SALDO

SAL AS (SELECT DISTINCT EE.PROCODIGO AS PROCODISAL,
REPLACE(EE.PREESTOQ - PS.PREPRVSAIDA - PC.PREPRVPDC, '.', ',') as SALDO
FROM ESTOQUE EE
LEFT JOIN PREVISAO_SAIDA PS ON EE.PROCODIGO = PS.PROCODIGO
AND PS.empcodigo =1
LEFT JOIN PREVISAO_PDC PC ON PS.PROCODIGO = PC.PROCODIGO
AND PC.empcodigo = 1
WHERE EE.EMPCODIGO = 1 )



-- SELECT FINAL COM UNIONS

SELECT DISTINCT
P.PROCODIGO
,Cast(P.prodescricao AS VARCHAR (255)) NOME_PRODUTO
,REPLACE(P.TPLCODIGO, '.', ',') AS COD_LINHA
,MARNOME
,REPLACE(PrEEstoque,'.', ',') AS QtdEstoque
,REPLACE(PrEEstMin,'.', ',') AS est_min
,REPLACE(PrEEstMax, '.', ',') AS est_max
,SALDO
,PfPQtdadeD1
,PfPQtdadeD5

FROM PRODU P
INNER JOIN DMU PM ON PM.PROCODIDMU=P.procodigo
LEFT JOIN PRO NC ON P.PROCODIGO=NC.PROCODIGO
INNER JOIN DMC DC ON DC.PROCODDMC=P.PROCODIGO
LEFT JOIN SAL SL ON SL.PROCODISAL=P.PROCODIGO
LEFT JOIN PREMP PP ON PP.PROCODIGO = P.PROCODIGO
AND PP.EMPCODIGO = 1
WHERE P.PROSITUACAO= 'A' and P. PROTIPO='E'
Paulo Segatto

Paulo Segatto

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar