INNER JOIN et Like - SQL/NoSQL - Programmation
Marsh Posté le 18-03-2008 à 19:33:04
comment c'est trop de la merde skype, il me propose d'appeler aux USA ton id_sante
à mon avis, c'est assez moyen de faire un like dans un critère de jointure.
quel est le sgbd que tu utilises ?
Marsh Posté le 18-03-2008 à 19:34:48
accessoirement, quels sont les types de tes champs id_prospect et id_sante ? (ça sent le CHAR ça...)
Marsh Posté le 18-03-2008 à 19:44:34
Avec SQL Server 2005 :
Code :
|
Résultat :
|
Je te laisse comprendre pourquoi :
|
N'est pas reconnu comme le début de :
|
Marsh Posté le 20-03-2008 à 11:00:31
ReplyMarsh Posté le 20-03-2008 à 19:21:11
Bon moi j'ai un probleme plus ou moins similaire, je profite donc de ce nom de topic qui me semble adapter
j'ai 2 tables
table 1 :
|id|nom|prenom|adresse|
table 2 (avec uid = table1.id)
id|uid|entreprise|adresse_entreprise|
en gros dans mon moteur de recherche si je tape :jean-paul
il m'affiche tout les "jean-paul" avec leur metié associé (ils peuvent en avoir plusiseur metier)
si je tape "la poste" il m'affiche tout ceux qui on un travail a la poste
si je tape "pierre" mais que pierre n'a pas d'emplois (oui ca arrive)
la ca m'affiche rien
voici mon type de requete si par exemple je cherche : pierre
Code :
|
Marsh Posté le 20-03-2008 à 22:31:22
masseur a écrit : Merci pour ces réponses. |
Relis ma réponse, c'est en rien inadapté... C'est juste que selon le type que tu utilises (un char en l'occurence) il faut faire attention. Les fonctions de trim() te permettrons de virer sans aucun problème les espaces ajoutés automatiquement par le type char...
sleath35 > rien à voir comme problème. tu dois utiliser une jointure "externe". cf. ma signature pour une description complète des différents types de jointures et des exemples.
Marsh Posté le 21-03-2008 à 00:41:16
MagicBuzz a écrit : |
merci d'etre aussi rapide, c'est exactememnt ce qu'il me fallais
sauf que la ca me surprime l'id de la table de membre si la personne n'a pas d'emplois, de plsu la recherche est extrement lente ???
Marsh Posté le 21-03-2008 à 10:50:03
bon ca marche mais c'est super lent...
doit bien y avoir un moyen d'optimiser ça, j'arrive a 9sec pour une requête c'est beaucoup trop long
Marsh Posté le 27-03-2008 à 10:22:05
c'est normal que ce soit lent car la jointure peut pas se faire sur un index, donc il fait un fullscan à chaque fois de la table
en fait X like "blabla%" peut utiliser un index, par contre X like "%blabla" ou "%blabla%" ça peut plu utiliser d'index
de même si tu rajoute un convert ( ), lower ( ), upper ( ) ou autre conversion de colone, ça passera plus par l'index de la colone, donc il fait un fullscan et compare champ par champ.
pareil pour le truc de masseur
une solution c'est d'utiliser une colone générée qui permetra de précalculer la valeur de la colone et sur laquelle tu pourras définir un index
Citation : "PROSPECT" |
par exemple là tu fais dans ta table SANTE une colone générée à partir de id_sante qui tronquera là partie -xxxxxxx et un index dessus, et tu feras ta jointure sur cette colone
avec certaines base de donnée, si tu fait un lower, la base est capable de faire appel au champ généré de façon transparente, si tu joins sur la colone d'origine dans ta requete.
Marsh Posté le 15-03-2008 à 14:08:11
Bonjour.
Je possède deux tables dont voici les champs et les valeurs qui nous interessent.
"PROSPECT"
id_prospect (1213243435)
"SANTE"
id_sante (1213243435-0)
Les deux ID sont les mêmes au -xxxxxxx prêt.
J'effectue donc cette requête.
SELECT *
FROM PROSPECT
INNER JOIN sante ON prospect.ID_PROSPECT like CONCAT(sante.IDSANTE, '%')
Cela ne retourne aucun resultat.
Comment cela se fait il?
Merci.