left join não tinha dado certo

Forum sobre SQL.

Moderador: Moderadores

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

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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