Page 1 sur 1

INNER JOIN avec USING et ON

Posté : 17 nov. 2005, 20:59
par Invité
Bonjour à tous !

Voilà, je suis en train de découvrir les requêtes avec jointures et j'ai suivi quelques tutoriaux là-dessus, mais je bloque sur un truc.

En gros, j'ai 3 tables :
Table livres
idLivre (PK, auto)
titre_livre
idAuteur
idCollection

Table auteurs
idAuteur (PK, auto)
nom_auteur
prenom_auteur

Table collections
idCollection (PK, auto)
nom_collection

Je voudrais faire une requête regroupant les 3 tables afin d'afficher dans un tableau le titre du livre, le nom de l'auteur et le nom de la collection et je me suis dit que INNER JOIN était le meilleur parti.

Je me suis donc lancé dans cette requête :

Code : Tout sélectionner

SELECT * FROM livres JOIN auteurs USING (id_auteur) JOIN collections USING (id_collection)
Mais là j'ai droit à un message d'erreur :

Code : Tout sélectionner

Unknown column 'test.auteurs.id_collection' in 'on clause'
Du coup, j'ai essayé avec ON et non USING :

Code : Tout sélectionner

SELECT * FROM livres INNER JOIN auteurs ON livres.id_auteur=auteurs.id_auteur INNER JOIN collections ON livres.id_collection=collections.id_collection
Celle-là marche parfaitement, mais je la trouve moins lisible. La syntaxe USING est plus claire je trouve.

Quelqu'un pourrait m'indiquer la différence entre les 2 syntaxes, ON et USING svp?

Merci :)

Posté : 18 nov. 2005, 18:03
par Ripat
Il n'y a pas de différence mais les colonnes reprises dans le USING doivent exister dans toutes les tables jointes. D'après la structure des tables l'exemple que tu donnes la colonne id_collection n'existe pas dans la table auteurs.
La clause USING (column_list) recense la liste des colonnes qui doivent exister dans les deux tables. Les clauses USING suivantes sont identiques :

a LEFT JOIN b USING (c1,c2,c3)
a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3

Posté : 19 nov. 2005, 02:04
par jalol
Merci pour l'éclaircissement :)