Jointure

Résolu
Teddy_le_gnein Messages postés 36 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 31 janvier 2011 - 9 févr. 2009 à 16:33
Teddy_le_gnein Messages postés 36 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 31 janvier 2011 - 9 févr. 2009 à 17:34
Hello tous le monde.
Voilà mon problème.
J'ai une requête à faire, je suis persuadé que ça ne dois pas être si insurmontable que ça, mais voilà je nage depuis un moment!

je pense que ma solution est une jointure mais je n'en ai jamais fait!
J'ai compris le principe, mais quelque chose doit encore m'échapper.

voilà la structure:
2 tables avec un 'id' en clé primaire, et d'autres champs d'infos

Il faut savoir que des champs 'id' identiques peuvent être dans les deux tables, ou n'etre que dans la 1ere.
exemple, l'id 10 est dans la 1ere table uniquement alors que l'id 20 est dans les deux tables.

Je souhaiterai obtenir la query qui dit : " afficher champs info x de la table 2 pour toutes les id que l'on retrouve dans les deux tables."

j'ai essayer un truc dans le genre

mysql_query('SELECT id,nom,statut
            FROM table1 INNER JOIN table2 ON table1.id=table2.id           
            WHERE id IN (SELECT id FROM table1) ORDER BY id')
            or exit(mysql_error());

j'ai un message : Column 'id' in field list is ambiguous
Je veux bien comprendre qu'il ne sache pas sur quel pied danser mais mois je sais sur lequel je veux qu'il le fasse...
Pourqoi ne comprent-il pas ce que je veux? : "qu'il m'affiche les infos statut de la table 1 et les infos nom de la table 2 pour toutes les lignes correspondantes au meme id ."

Notta : la requete suivante fonctionne et me donne l'id et le statut
SELECT id,statut FROM table1 WHERE id IN (SELECT id FROM table2) ORDER BY id
mais dès que je cherche à obtenir l'info nom de la table2 je me retrouve bloqué.

J'espère etre assez clair!
une idée?
En vous remerciant!

3 réponses

jeremyCLIGRAPHCRM Messages postés 25 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 11 février 2009
9 févr. 2009 à 16:55
Bonjour,

Column 'id' in field list is ambiguous :
En fait vu que tu as un champ "id" dans tes deux tables mysql  ne sait pas quel identifiant afficher.
Il faut que tu lui précise en préfixant le champ par le nom de la table comme ceci :
table.champ

 Pour toi ce seradonc table1.id

_______________________
Jérémy, Membre du projet open source Cligraphcrm.
3
jeremyCLIGRAPHCRM Messages postés 25 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 11 février 2009
9 févr. 2009 à 17:03
Ps : Pour ta requête elle peut être plus simple :

SELECT table1.id,nom,statut
            FROM table1,table2           
            WHEREtable1.id=table2.id
            ORDER BY table1.id

Le texte en gras est la jointure entre tes deux tables.
Avec ce type de jointure seuls les enregistrements qui auront l'identifiant dans les deux tables seront retournés.

Je t'invite à voir des tutoriaux sur le net, par exemple :
http://sqlpro.developpez.com/cours/sqlaz/jointures/#L2.4

_______________________
Jérémy, Membre du projet open source Cligraphcrm.
3
Teddy_le_gnein Messages postés 36 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 31 janvier 2011
9 févr. 2009 à 17:34
Merci beaucoup...
J'était en train d'essayer la deuxième méthode que tu m'as écrit (la simple)
J'avais finir par trouver ça sur le net, mais j'avais une erreur à cause du order...
Je n'avais pas mis la table.id, mais juste id...

donc merci beaucoup à toi et à ta réactivité.
je vais pouvoir avancer...
3
Rejoignez-nous