PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 28/12/2012 13:19:20

youssef
Membre

Like d'une valeur dynamique

Bonjour

svp, est ce qu'il y a une syntaxe qui permet d'utiliser la clause like avec le résultat d'une requête.

un peu comme  (exemple)  :

where 
adresse like '% (select ville from villes where dep ='75'  ) %'

pour savoir si il y a des adresses appartenant à des villes du 75

je sais pas si l'exemple est parlant ou pas, c'est le premier que mes cellule grises m'ont envoyé tongue

Merci à vous

Hors ligne

#2 28/12/2012 13:35:19

kenrio
Membre

Re : Like d'une valeur dynamique

je pars déjeuné donc j'ai pas la réponse mais si ça fonctionne et j'en doute niveau performance ça doit être proche du zéro ^^

Hors ligne

#3 28/12/2012 14:16:11

gleu
Administrateur

Re : Like d'une valeur dynamique

Montrez la requête entière si vous voulez qu'on puisse vous aider....


Guillaume.

Hors ligne

#4 31/12/2012 11:39:42

youssef
Membre

Re : Like d'une valeur dynamique

Pour ce cas j'ai pas vraiment de requête mais juste un exemple,

imaginons deux tables avec un champ adresse qu'on nommé Table_adrs , et une 2eme table avec les villes et leur code département,  qu'on va appeler table_ville

l'objectif et d'avoir les lignes de table_adrs qui appartienne à des villes d'un département donné

-- liste des villes d'un département 
select ville from table_ville where dep='75' 
-- liste des adresses d'une ville par exemple 'PARIS'
select *  from table_adrs where adresse like '%PARIS%' 

la question est :
y a t il une (option/fonction/syntaxe)  qui va permettre de combiner ces 2 requêtes en une seule
et permettre de passer le résultats de la première  dans le motif de like.

j'espère que c'est mieux claire maintenant

Merci

Dernière modification par youssef (31/12/2012 11:46:02)

Hors ligne

#5 31/12/2012 12:01:46

MitsuTomoe
Membre

Re : Like d'une valeur dynamique

Bonjour,
si je comprend bien votre colonne Table_adrs contient l'adresse sous forme non structurée, par exemple "10 rue des Alouettes 75006 PARIS" ?
Dans ce cas, vous ne pourrez jamais faire de recherche exacte. Comment distinguer "12 rue de Paris 11100 NARBONNE" de "1 rue de la Paix 75009 PARIS" ?
Si la saisie a été standardisée, vous pouvez essayer de transformer votre champ Table_adrs en une structure adresse correcte :
complément adresse, numéro voie, type voie, nom_voie, distrib speciale, lieudit, code postal, cedex, numéro insee commune.
Une petite procédure pourrait traiter 99% des cas, une revue et correction manuelle s'imposant pour le reste.
Ai-je tout compris ou votre exemple n'était-il pas réel ?

Hors ligne

#6 31/12/2012 12:32:30

rjuju
Administrateur

Re : Like d'une valeur dynamique

Bonjour,

comme le dit MitsuTomoe, il est en effet préférable d'avoir une meilleur structure pour stocker l'adresse. Une adresse est normalisée par la poste (32 caractères par ligne, tout en majuscule...), surtout pour l'envoi en masses par les entreprises.


En l'état, pour votre requête, il faudrait faire quelque chose du genre:


SELECT * FROM table_adrs
JOIN table_ville ON tableville.dep=75 AND table_adrs LIKE '%' || tableville.ville || '%'

mais les problèmes de nom de rue donnés par MitsuTomoe seront présent, avec en plus des performances désastreuses.

Hors ligne

#7 31/12/2012 17:33:33

youssef
Membre

Re : Like d'une valeur dynamique

Merci pour vos retours,

@MitsuTomoe vous avez tout compris, et l'exemple est réel

@rjuju merci pour l'exemple de requête ,

LIKE '%' || tableville.ville || '%'

Hors ligne

Pied de page des forums