begin process at 2012 05 26 12:05:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

MySQL

 > 

Requêtes

 > 

Chercher occurrences sur plusieurs tables par la jointure


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Chercher occurrences sur plusieurs tables par la jointure

lundi 2 mai 2011 à 12:13:21 | Chercher occurrences sur plusieurs tables par la jointure

foetus69

Bonjour, je suis nouvelle.

Ceci est mon premier post et j'espère que vous pourrez m'aider.

Je cherche une syntaxe pour retrouver un mot clef sur plusieurs tables mais que cela se fasse entre un champ et un autre. Je m'explique :

Grosso modo j'ai mon occurrence dans la table 3 (disons "toto") et si je trouve ce mot clef dans les champs des tables 1 et 2 j'affiche l'enregistrement de la table 3, je ne sais pas si c'est clair et faisable.

J'ai fait pour le moment ceci, en vain :
$query = "SELECT t3.* FROM table3 t3 INNER JOIN table2 t2 ON t3.nom LIKE '%t2.champ2%'";

Merci par avance de votre aide.

HK aka F69
mardi 3 mai 2011 à 16:32:29 | Re : Chercher occurrences sur plusieurs tables par la jointure

foetus69

Bonjour,

J'ai essayé ceci :


SELECT t3.* FROM table3 t3 INNER JOIN table2 t2 ON t3.nom LIKE CONCAT('%', t2.champ2, '%')


Pas mieux...Il faut des valeurs exactes pour que ca marche les jointures ? Ca serait étonnant. LIKE CONCAT fonctionne qu'avec des mots clefs ?

On peut pas matcher de la sorte ?

A -> A
A -> B
A -> C
B -> A
B -> B
...

?

Par avance merci de votre aide.
mardi 3 mai 2011 à 17:07:18 | Re : Chercher occurrences sur plusieurs tables par la jointure

jopop

Réponse acceptée !
Salut,

quel SGBD utilises-tu ?
J'ai tenté une telle requête (avec les familles de ROME (ex.: 'A') et les codes ROME (ex. : 'A1101')) sous MySQL et ça fonctionne. Voilà à quoi elle ressemble :
Code :
SELECT *
  FROM ref_rome_familles F
  INNER JOIN ref_rome_metiers M
  ON M.code LIKE CONCAT(F.code,'%');


Par contre j'ai pas compris ton histoire de matching A->A, A->B [..]
mercredi 4 mai 2011 à 09:57:27 | Re : Chercher occurrences sur plusieurs tables par la jointure

foetus69

Bonjour et surtout un grand MERCI !!!!

Moi je faisais l'inverse

Si je reprends ta requête, je faisais :

Code :
SELECT *
  FROM ref_rome_familles F
  INNER JOIN ref_rome_metiers M
  ON F.code LIKE CONCAT('%',M.code,'%');


Je maitrise mal les jointures et n'avais pas compris le sens du ON. Juste à intervertir

Well done et encore MERCI à toi
mercredi 4 mai 2011 à 09:59:33 | Re : Chercher occurrences sur plusieurs tables par la jointure

jopop

Je t'avouerai que la première fois que j'ai tapé la requête dans Toad je l'ai également écrite à l'envers ^^
mercredi 4 mai 2011 à 11:20:12 | Re : Chercher occurrences sur plusieurs tables par la jointure

foetus69

re bonjour,

Dernière question (si tu veux bien) : quelle est la bonne syntaxe pour la jointure pour dire trouve moi ça dans la table 1 OU dans la table 2.

Exemple trouver M.Code dans ref_rome_familles.code et la table disons : ref_rome_travailleurs T.

J'ai vu qu'on pouvait faire une succession d'INNER mais que ca sous-entend qu'on retrouve dans chaque table hors moi je cherche à trouver la correspondance dans l'une ou l'autre.

Tu sais ?



mercredi 4 mai 2011 à 11:33:30 | Re : Chercher occurrences sur plusieurs tables par la jointure

jopop

Il faut que tes 2 tables aient la même structure, ou que les listes des champs sélectionnés correspondent. Exemple, soit 2 tables :
Code :
tb1 { int id, varchar name, varchar code, varchar description }
tb2 { int id, varchar name, varchar code, int value }

Le principe est de faire la requête sur chaque table, et de sommer les résultats grace à "UNION/UNION ALL". Reprenons l'exemple. On cherche les enregistrements de tb1 & tb2 où code = 'ABC123' :
Code :
SELECT id, name, code FROM tb1 WHERE code = 'ABC123'
UNION ALL
SELECT id, name, code FROM tb2 WHERE code = 'ABC123';


Tu noteras que je ne fais pas un "SELECT *", car le dernier champ n'est pas du même type dans les deux tables, le rassemblement ne serait donc pas possible.

NB : la différence entre UNION et UNION ALL :
UNION ALL : fait le rassemblement brut des 2 requêtes
UNION : applique un "DISTINCT" lors du rassemblement
Dans notre exemple, si tb1 et tb2 contiennent un même enregistrement (identique sur tous les champs de la sélection s'entend, donc même id, même name et même code) alors il ne ressortira qu'une fois.
mercredi 4 mai 2011 à 13:56:19 | Re : Chercher occurrences sur plusieurs tables par la jointure

foetus69

RE re re re re,

Merci pour ce cours particulier ^^

Dans mon cas je recherche 'toto' dans plusieurs tables : dans le champ nom sur la table 1, dans un champ commentaires dans la table 2 etc... Ce n'est donc pas possible ?

Tu as un livre facile d'accès à me recommander sur le SQL ?

Merci



mercredi 4 mai 2011 à 14:07:24 | Re : Chercher occurrences sur plusieurs tables par la jointure

jopop

J'ai pas de livre à te recommander, désolé

Par contre tu pourras trouver tous les tuto que tu souhaites sur Internet, que ce soit sur le Ring CS ou d'autres (ex. : developpez.com)

Pour ton cas c'est tout à fait possible, prenons un nouvel exemple.
Soit les 2 tables :
Code :
tb1 {int id, varchar name, varchar description }
tb2 {varchar code, varchar label, double price }

Rien ne t'empêche de faire :
Code :
SELECT name FROM tb1
UNION ALL
SELECT label FROM tb2;

En fait il faut simplement que les types et le nombre de champs sélectionnés dans ta "première" requête correspondent à ceux de la "deuxième" (et il faut qu'un tel regroupement ait un sens ^^ mais techniquement ça fonctionne)
mercredi 4 mai 2011 à 15:07:12 | Re : Chercher occurrences sur plusieurs tables par la jointure

foetus69

Ok je vois et si une 3ème table fait son apparition, quelle est la syntaxe finale ?

En gros j'affiche les enregistrements de name si je trouve une occurrence de name dans label de tb2 OU comments de tb3 ?

Je sais dire si ca se trouve dans tb2 et tb3 par la multiplications des INNER JOIN mais la condition

1 2

Cette discussion est classée dans : tables, chercher, jointure, t3, occurrences


Répondre à ce message

Sujets en rapport avec ce message

jointure et occurences multiples [ par lemoko ] bonjour, j'ai 4 tables, la principale: DOCUMENT (principale) ID, nom COMMENTAIREperso (incrémentée) ID, texte2 COMMENTAIREgroupe (incrémentée) ID, Jointure [ par Aaron ] Bonjour/bonsoir à toutes et à tous,J'ai un petit problème en ce qui concerne une jointure. J'ai plusieurs tables 'USERS', BUILD' et 'MAILS' dans lesqu requete sur 3 tables [ par Ma2004 ] Bonjour,Je dispose de trois tables A, B et C.A: idA,nom,prenomB: idB,lieu,distanceC: idC,idA,idB,tempsidA clé primaire unique de AidB clé primaire uni Requête SQL sur 3 tables [ par phileuf ] Bonjour,Cela fait quelques jours que je me creuse la tête avec une requête trop dure pour moi...J'ai trois tables:- albums : avec notamment les champs ACCESS SQL ou VBA [ par benjy94 ] Bonjour,Je débute sur ACCESS et me demande quel est la solution la plus rapide pour mon petit probléme SQL ou VBA?Probleme de base:Des données dépassa Comparaison de temps d'execution par rapport à la structure d'une table [ par hasen ] Amis du jour, bonjour!Je m'explique, car j'ai l'impression que mon titre n'est pas clair... J'ai une base de données Access avec 2 très grosses tables classer les valeurs de deux tables par date ? [ par babbleshit ] Bonjour, Dans le but de réaliser un planning de sorties, je souhaiterai classer deux tables ensemble par dates de manière à obtenir un résultat dans l Relation entre deux tables (dates [ par fzf ] Bonjour à tous,Je crée une base de donnée, je ne comprend pas pourquoi access ne veut pas me créer ma jointure entre deux lorsque c'est des dates.Je p jointure triple [ par petitnounoursjoyeux ] Bonjour tout le monde, je galère depuis un bon moment, j'ai été voir divers forums et tuto, mais pas moyen de faire cette requete de #&#$!#% en gros : Suppression dans deux tables [ par MissCile ] Hello!J'ai trois tables : Employés (NomE, prenomE, n°employeE,adresse,statut)Caissiers ( N°employeC,n°caisse)Reassortisseurs (N° employeR, Ndepartemen


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales