OK, allons-y par étapes...
Remarque préalable : vous devriez nommer vos tables au singulier.
1)
On va tout de suite mettre un alias à la table guichets parce qu'on en aura besoin pour la suite, même si c'est inutile à cette étape. Les alias facilitent l'écriture de la requête quand on met en jeu plusieurs tables, et même la lecture ensuite de la requête.
1 2
| SELECT g.guichet_cod, g.poste, g.etat_guichet
FROM guichets g |
Ça, c'était basique !
2)
Problème : il n'y a pas de référence directe à la délégation dans la table guichets.
Reprenons le schéma que j'ai donné plus haut :
On voit facilement qu'on peut avoir la délégation correspondant au guichet en faisant une jointure entre guichets et agences puis une autre entre agences et délégations.
1 2 3 4
| SELECT g.guichet_cod, g.poste, g.etat_guichet
FROM guichets g
INNER JOIN agences a ON a.agc_cod = g.agc_cod
INNER JOIN delegations d ON d.ref_dlg = a.ref_dlg |
Simple, non ?
Et puisqu'on ne veut que les guichets de la délégation choisie, on ajoute une condition de restriction avec la clause WHERE :
1 2 3 4 5
| SELECT g.guichet_cod, g.poste, g.etat_guichet
FROM guichets g
INNER JOIN agences a ON a.agc_cod = g.agc_cod
INNER JOIN delegations d ON d.ref_dlg = a.ref_dlg
WHERE d.lib_dlg = :libelle_delegation_choisie |
Si votre application stocke en paramètre de la liste déroulante l'identifiant de la délégation, vous n'avez même pas besoin de la seconde jointure puisque cet identifiant se trouve dans la table agences :
1 2 3 4
| SELECT g.guichet_cod, g.poste, g.etat_guichet
FROM guichets g
INNER JOIN agences a ON a.agc_cod = g.agc_cod
WHERE a.ref_dlg = :reference_delegation_choisie |
Compris le principe et lé méthode ?
Partager