Página 1 de 1

Sobre uso do LEFT JOIN

Enviado: 27 Out 2024 17:37
por Poka
Olá à todos,


muito lerdo

str:="select m.nomeprod , p.nome , m.docum , p.fantasia , m.destino , m.tpnota, m.serie from "+notam +" m ";
+" LEFT JOIN pessoas p ON (m.destino||'CLI' = p.codigo||p.tppessoa ) where cfopx = '06' order by p.fantasia;"
beeem mais rapido

str:="select m.nomeprod , p.nome , m.docum , p.fantasia , m.destino , m.tpnota, m.serie from "+notam +" m , pessoas p ";
+" where m.destino||'CLI' = p.codigo||p.tppessoa and cfopx = '06' order by p.fantasia;"
Será que não estou sabendo usar o Left Join?

Poka

Sobre uso do LEFT JOIN

Enviado: 27 Out 2024 20:01
por SOSSOFT
Algumas perguntas:
Você usa Postgress? Ou MySQL?
Por que você usa || no lugar de concat()?

E se mudar para:

Código: Selecionar todos

str := "SELECT m.nomeprod, p.nome, m.docum, p.fantasia, m.destino, m.tpnota, m.serie " + ;
       "FROM " + notam + " m " + ;
       "LEFT JOIN pessoas p ON (m.destino + 'CLI' = p.codigo + p.tppessoa) " + ;
       "WHERE cfopx = '06' " + ;
       "ORDER BY p.fantasia;"
Fica melhor?

PS: Use a opção Code para enviar mensagens com código fonte, no caso você deveria ter enviado sua mensagem assim (veja como fica bem melhor para visualizar):

Código: Selecionar todos

str:="select m.nomeprod , p.nome , m.docum , p.fantasia , m.destino , m.tpnota, m.serie from "+notam +" m ";
+" LEFT JOIN pessoas p ON (m.destino||'CLI' = p.codigo||p.tppessoa ) where cfopx = '06' order by p.fantasia;"

Sobre uso do LEFT JOIN

Enviado: 27 Out 2024 20:07
por Poka
Uso Firebird


Poka

Sobre uso do LEFT JOIN

Enviado: 27 Out 2024 20:25
por SOSSOFT
Firebird deveria voar se está tudo certinho.
Eu sempre sugiro usar algum editor SQL em uma cópia da sua base real (especialmente se for grande), para fazer testes reais

Você tentou minha sugestão?

Poderia tentar algo assim também:

Código: Selecionar todos

select m.nomeprod, p.nome, m.docum, p.fantasia, m.destino, m.tpnota, m.serie
from notam m
LEFT JOIN pessoas p ON m.destino = p.codigo AND p.tppessoa = 'CLI'
where m.cfopx = '06'
order by p.fantasia;
Em resumo considere:

Indexação (especialmente o que usa muito no select)

Otimizar condição JOIN: Ao invés de join em m.destino||'CLI' = p.codigo||p.tppessoa, tente criar um campo calculado no banco de dados que armazene diretamente esse resultado concatenado. Dessa forma, você pode unir em um único campo em vez de concatenar dinamicamente, o que pode ser lento.

Se o banco tiver muitas linhas (registros/rows), tente não colocar em ordem no select, mas faça isso no menor recordset que conseguir

Coim estas sugestões deverá ficar muito melhor

Sobre uso do LEFT JOIN

Enviado: 28 Out 2024 10:54
por Poka
Sossoft

Testei o seu código, ficou rapidão, quase instantâneo, são mais ou menos 5.000 registros, é que essa rotina é executada toda vez que entra no sistema e toda vez que volta na tela principal, executa esta rotina para mostrar dados na tela principal, antes estava uns 7 segundos , não é nada, mas com 2 segundos é melhor né.

Obrigado


Poka

Sobre uso do LEFT JOIN

Enviado: 28 Out 2024 14:45
por SOSSOFT
Que bom que resolveu