Ir para conteúdo
Fórum Script Brasil
  • 0

Pesquisar o nome mais parecido


Dr. House

Pergunta

Bom dia, tenho a seguinte situação:

tabela a

id,codigo,nome

tabela b

id,codigo,nome

preciso consultar na tabela B, no campo nome, o que for mais parecido com o nome da tabela A e trazer o id da tabela B

para gerar um insert numa tabela equivalenciaAB

eu usei o seginte comando mas não ta me retornando de maneira eficiente:

select
  id,
  levenshtein (upper(b.nome), upper('nome que vem da tabela A passado por parametro em java')) as ctrl
from 
  tabela b
order by
  levenshtein (upper(b.nome), upper('nome que vem da tabela A passado por parametro em java'))
limit 1

mas a taxa de acerto, esta muito pequena, uns 5%...

alguém tem alguma outra ideia?

Editado por Dr. House
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

levenshtein retorna um int com um score, qt menor o score, menor o erro.

Se eu eu passo a seguinte consulta:

select 
  coalesce(nrs.id,0) as id,
  nrs.nome,
  upper(nrs.codigo||nrs.nome) as nomeNatRecSiga,
  levenshtein(upper(nrs.codigo||nrs.nome), upper('1721333100PSF - Programa de Saúde da Família')) as ctrl 
from 
  naturezareceitasiga nrs
order by 
levenshtein(upper(nome), upper('1721333100PSF - Programa de Saúde da Família'))

o menor score foi 28:

11212099OUTRAS TAXAS DE SAÚDE SUPLEMENTAR 28

qd deveria ter retornado o valor a baixo, e com um score menor

17213331PSF - PROGRAMA DE SAÚDE DA FAMÍLIA
Editado por Dr. House
Link para o comentário
Compartilhar em outros sites

  • 0

No order by você está comparando só o nome:

levenshtein(upper(nome), upper('1721333100PSF - Programa de Saúde da Família'))
Para evitar este tipo de erro use o posicionamento da coluna no order by:

with naturezareceitasiga(id, codigo, nome) as (
    values (1, '1721333100PSF', 'Programa de Saúde da Família')
)
select
    levenshtein(upper(nrs.codigo || nrs.nome), upper('1721333100PSF - Programa de Saúde da Família')) as ctrl,
    coalesce(nrs.id,0) as id,
    nrs.nome,
    upper(nrs.codigo || nrs.nome) as nomeNatRecSiga
from naturezareceitasiga nrs
order by 1
;
 ctrl | id |             nome             |              nomenatrecsiga               
------+----+------------------------------+-------------------------------------------
    3 |  1 | Programa de Saúde da Família | 1721333100PSFPROGRAMA DE SAÚDE DA FAMÍLIA
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...