left join não tinha dado certo

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

left join não tinha dado certo

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

left join não tinha dado certo

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder