Jump to content
Fórum Script Brasil
  • 0

Pesquisar o nome mais parecido


Dr. House

Question

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?

Edited by Dr. House
Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 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
Edited by Dr. House
Link to post
Share on other 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148876
    • Total Posts
      644882
×
×
  • Create New...