Página 1 de 1

left join não tinha dado certo

Enviado: 03 Abr 2024 17:21
por JoséQuintas

Código: Selecionar todos

      :cSQL := "SELECT IEVALOR, ze_ProdutoCustoContabil( IDPRODUTO ) AS CUSCON," + ;
         " ze_ProdutoUltimaEntradaValor( IDPRODUTO ) AS ULTENTVAL, IETIPO, PCVALOR," + ;
         "  ze_ProdutoMargem( IDPRODUTO ) AS MARGEMCUSTO" + ;
         " FROM JPITEM" + ;
         " LEFT JOIN JPPRECO ON PCPRODUTO = IDPRODUTO" + ;
            " AND  ( PCCADASTRO = " + NumberSQL( nIdCadastro ) + ;
            " OR PCCADASTRO IN ( SELECT PFCADMATRIZ FROM JPPRECOFIL WHERE PFCADFILIAL = " + NumberSQL( nIdCadastro ) + " ) )" + ;
            " AND PCFORPAG = " + NumberSQL( nIdForPag ) + ;
            " AND PCURGENTE = " + NumberSQL( nUrgente ) + ;
            " AND PCSTATUS=1" + ;
         " WHERE IDPRODUTO = " + NumberSQL( nIdProduto )
já resolvi, apenas achei estranho não funcionar antes.
O PCSTATUS=1 tinha colocado no where, mudei para o LEFT JOIN.

O que aconteceu?
Tem tabela matriz mas pode ter tabela filial, status=1 é tabela ativa.
a tabela filial foi desativada e não estava pegando da matriz.

Hummmm.... agora no post é que acho que descobri....
LEFT JOIN deve pegar somente a primeira
INNER JOIN deve pegar todas
por isso o filtro do WHERE falhou, porque só entrou a desativada.
Com a mudança, pega diretamente a ativa.

left join não tinha dado certo

Enviado: 03 Abr 2024 17:58
por JoséQuintas
unionall.png
E em outro lugar estava diferente com UNION ALL.

Quando implementei isso, a tabela desativada era excluída.
Agora refazendo o processo pra simplificar configuração e ter mais segurança.
É que junto ao preço tem todo histórico de vários anos, não se trata apenas de excluir um valor.

Nota: isso tem auto-limpeza, fica só por alguns anos.