J’ai un problème qui me paraît pas si compliqué mais dont je n’arrive pas à me dépétrer. Comme il est assez intéressant et susceptible d'être utile à d'autres, je vous le soumets :
J’ai deux tables (j’utilise PostgreSQL) :
CREATE TABLE a
(
id_alphanum varchar(70) NOT NULL,
CONSTRAINT pk_a PRIMARY KEY (id_alphanum)
) ;
CREATE TABLE b
(
id_num varchar(30) NOT NULL,
id_alphanum(70),
CONSTRAINT pk_b PRIMARY KEY (id_num)
) ;
Les identifiants alphanumériques sont des descripteurs de lieux, par exemple ‘ruederivoli’.
Comme les concepteurs de la table a et de la table b ne sont pas les mêmes, les id_alphanum ne coïncident pas alors qu’ils décrivent les mêmes objets. Par exemple, ‘rue de Rivoli’ (avec espace, lettres capitales et article) vs. ‘ruerivoli’ (minimaliste).
Mon problème est d’identifier, en vue d’une mise à jour, les id_alphanum de la table b avec ceux de la table a. J’ai déjà écrit une fonction distance_mots(varchar,varchar) qui me retourne la distance entre deux mots : zéro si ce sont les mêmes mots et +1 à chaque opération ajout de caractère/suppression (c’est la distance de Levenshtein pour ceux que ça intéresse).
Je cherche à produire une requête qui m’affiche tous les a.id_alphanum avec en regard le b.id_alphanum le plus proche.
Je m’empatouille avec les GROUP BY, les MIN etc, mais je n'arrive pas à ce résultat. Si vous avez une idée de génie, je suis preneur.
Merci à la communauté
Sakalam
Partager