J'ai une base de données MySQL qui ressemble à ceci:Amorce SQL: pourquoi et comment utiliser les instructions de jointure?
users
(id , name)
groups
(id , name)
group_users
(id , group_id , user_id)
Maintenant, pour rechercher tous les groupes auxquels appartient un utilisateur, je ferais quelque chose comme ceci:
select * from 'group_users' where 'user_id' = 47;
Cela reviendra probablement quelque chose comme:
(1 , 3 , 47),
(2 , 4 , 47),
Mais quand je veux montrer cela à l'utilisateur, je vais vouloir afficher le nom des groupes qu'ils appartiennent à la place du group_id
. Dans une boucle, je pourrais aller chercher chaque groupe avec le group_id
qui a été retourné, mais cela semble être la mauvaise façon de le faire. S'agit-il d'un cas où une instruction join
doit être utilisée? Quel type de joint dois-je utiliser et comment l'utiliser?
Qu'arrive-t-il au jeu de résultats après qu'il a été joint? Des colonnes sont-elles ajoutées? Ou les valeurs d'id sont-elles remplacées par les valeurs de nom? – Andrew
Je ne suis pas entièrement sûr de ce que vous demandez. Les colonnes ne sont ajoutées que si vous indiquez au serveur de les ajouter. Les ID ne sont pas remplacés par des noms. Les valeurs de la base de données restent inchangées lors des requêtes SELECT. Les choses ne peuvent être remplacées que si vous utilisez une instruction 'UPDATE'.Ce qui se passera dans cette requête d'exemple spécifique est que votre jeu de résultats contiendra les noms de tous les groupes associés à l'utilisateur dont l'identifiant est 47. Il n'y a pas d'ajout, de remplacement ou de quoi que ce soit de sournois. Juste une requête régulière retournant un ensemble de résultats. – Welbog
Peu importe, j'ai trouvé la réponse à ma question. L'instruction select détermine quelles colonnes sont retournées, donc au lieu de dire 'select * from ...' je pourrais le réduire et ne retourner que le nom du groupe et l'id en disant 'select groups.name, groups.id from ...' – Andrew