Fórum Dúvida com Left Join: Interno + externo / Inner Join: Cálculo interno #430989

13/12/2012

0

Olá,
estou com dois join's que não estou conseguindo entender, alguém poderia me explicá-los? Segue:

left join (b_produto_grupo left join b_produto_grupo pgm on b_produto_grupo.i_cod_b_produto_grupo_r = pgm.i_cod_b_produto_grupo)
on m_produto.i_cod_b_produto_grupo = b_produto_grupo.i_cod_b_produto_grupo




inner join (select
max(dt_base) as dt_base, i_cod_m_saldo_estoque, i_cod_m_pessoa_empresa
from
m_historico_estoque
where
dt_base <= '2012-11-30'
and f_preco_custo > 0
group by
i_cod_m_saldo_estoque, i_cod_m_pessoa_empresa
) de on (de.i_cod_m_saldo_estoque = m_saldo_estoque.i_cod_m_saldo_estoque and
de.i_cod_m_pessoa_empresa = m_saldo_estoque.i_cod_m_pessoa_empresa)
Luiz Eduardo

Luiz Eduardo

Responder

Posts

13/12/2012

Claudia Nogueira

Nesse primeiro dá a entender que na mesma tabela está salvando grupos e sub-grupos, sendo que os grupos ficam na tabela de produto e os sub-grupos na própria tabela de grupo.
Eu não faria assim, eu faria:

LEFT JOIN b_produto_grupo bpg ON (m_produto.i_cod_b_produto_grupo = bpg.i_cod_b_produto_grupo)
LEFT JOIN b_produto_grupo pgm ON (bpg.i_cod_b_produto_grupo_r = pgm.i_cod_b_produto_grupo)


Nesse segundo parece que precisa ter esses 3 campos no SELECT dt_base, i_cod_m_saldo_estoque, i_cod_m_pessoa_empresa, e em vez de colocar um SELECT pra cada campo na própria sentença em cima, ele preferiu fazer dessa forma que é mais rápido:

INNER JOIN (SELECT MAX(dt_base) AS dt_base, i_cod_m_saldo_estoque, i_cod_m_pessoa_empresa 
FROM m_historico_estoque 
WHERE (dt_base <= '2012-11-30')
  AND (f_preco_custo > 0)
GROUP BY i_cod_m_saldo_estoque, i_cod_m_pessoa_empresa) de ON 
((de.i_cod_m_saldo_estoque = m_saldo_estoque.i_cod_m_saldo_estoque) AND (de.i_cod_m_pessoa_empresa = m_saldo_estoque.i_cod_m_pessoa_empresa))


Depois em cima só precisa fazer isso: de.dt_base, de.i_cod_m_saldo_estoque, de.i_cod_m_pessoa_empresa.

Sempre que for fazer um sentença, coloque as condições entre parenteses, além de ficar mais organizado, fica mais rápida a consulta.

Não sou muito boa de explicar. :)
Responder

Gostei + 0

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

Aceitar