Requêtes avancées : jointure ou pas ?
Résolu
zipe31
Messages postés
36402
Date d'inscription
Statut
Contributeur
Dernière intervention
-
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
Salut @ tou(te)s,
Je suis en plein apprentissage des BDD et je digère très difficilement tout ce qu'il m'a été donné à manger depuis une semaine ;-))
Je vous expose le schéma, je vous mets juste le contenu de la base (Facture) et les 2 tables qui sont en jeux pour l'instant (Client et Vendeur) :
À partir de là il m'est demandé d'afficher le nom des vendeurs qui suivent 3 clients ou plus.
Pas de problème pour afficher le code_vendeur qui répond aux critères demandés¹ :
Par contre, je n'arrive absolument pas à construire la requête qui récupère le code_vendeur de la requête ci-dessus, et que celle-là, pour pouvoir afficher le nom du vendeur par la suite ;-(
En gros ma demande se résume juste à comment n'exploiter (ou n'afficher) qu'un seul champ d'une requête en contenant 2 ou plusieurs ?
Merci aux âmes charitables qui voudront bien m'éclairer sur ce point.
¹ Merci aux puristes d'être indulgents si ma requête n'est pas la plus simple ni la plus optimisée ;-\
Je suis en plein apprentissage des BDD et je digère très difficilement tout ce qu'il m'a été donné à manger depuis une semaine ;-))
Je vous expose le schéma, je vous mets juste le contenu de la base (Facture) et les 2 tables qui sont en jeux pour l'instant (Client et Vendeur) :
[jp@localhost] (Facture) > show tables; +-------------------+ | Tables_in_Facture | +-------------------+ | Client | | Facture | | Règlement | | Vendeur | +-------------------+ 4 rows in set (0.00 sec) [jp@localhost] (Facture) > select * from Client; +-------------+----------------+-----------+--------------+ | code_client | raison_sociale | ville | code_vendeur | +-------------+----------------+-----------+--------------+ | 1 | SA Dejoncours | Marseille | 1 | | 2 | SARL Ajax | Marignane | 1 | | 3 | SA Garaux | Sète | 1 | | 4 | SA Décapage | Bordeaux | 2 | | 5 | EURL Demaison | Pauillac | 2 | +-------------+----------------+-----------+--------------+ 5 rows in set (0.00 sec) [jp@localhost] (Facture) > select * from Vendeur; +--------------+-------------+-------+------+ | code_vendeur | nom_vendeur | ville | ca | +--------------+-------------+-------+------+ | 1 | Tixier | NULL | NULL | | 2 | Durand | NULL | NULL | +--------------+-------------+-------+------+ 2 rows in set (0.00 sec)
À partir de là il m'est demandé d'afficher le nom des vendeurs qui suivent 3 clients ou plus.
Pas de problème pour afficher le code_vendeur qui répond aux critères demandés¹ :
[jp@localhost] (Facture) > select code_vendeur,count(code_vendeur) from Client \ group by code_vendeur having count(code_vendeur) >= 3; +--------------+---------------------+ | code_vendeur | count(code_vendeur) | +--------------+---------------------+ | 1 | 3 | +--------------+---------------------+ 1 row in set (0.00 sec)
Par contre, je n'arrive absolument pas à construire la requête qui récupère le code_vendeur de la requête ci-dessus, et que celle-là, pour pouvoir afficher le nom du vendeur par la suite ;-(
En gros ma demande se résume juste à comment n'exploiter (ou n'afficher) qu'un seul champ d'une requête en contenant 2 ou plusieurs ?
Merci aux âmes charitables qui voudront bien m'éclairer sur ce point.
¹ Merci aux puristes d'être indulgents si ma requête n'est pas la plus simple ni la plus optimisée ;-\
A voir également:
- Requêtes avancées : jointure ou pas ?
- Accéder aux options de démarrage avancées de windows 10 - Guide
- Nos systèmes ont détecté un trafic exceptionnel sur votre réseau informatique. cette page permet de vérifier que c'est bien vous qui envoyez des requêtes, et non un robot. que s'est-il passé ? - Forum Virus
- Expliquez les différences entre les différentes requêtes ✓ - Forum Réseaux sociaux
- Différence entre deux dates dans une requête ✓ - Forum Programmation
- Alerte récurrente Google : trafic exceptionnel sur le réseau - Forum MacOS
1 réponse
Bonjour zipe
Pas essayé, mais à vue de nez :
L'idée est de dire avec le inner join quelle est la deuxième table et avec le ON le critère qui relie les deux tables. Par ailleurs, pour éviter les ambiguïtés, il est bon de préciser table.champ au lieu du nom de champ seul quand le même nom apparaît dans les deux.
Je ne suis pas spécialiste non plus, les puristes amélioreront. En particulier je crois que quand le champ qui sert à la jointure est le même dans les deux tables, un
Pas essayé, mais à vue de nez :
select Client.code_vendeur,nom_vendeur, count(Client.code_vendeur) from Client INNER JOIN Vendeur ON Client.code_vendeur=Vendeur.code_vendeur \ group by Client.code_vendeur having count(Client.code_vendeur) >= 3;
L'idée est de dire avec le inner join quelle est la deuxième table et avec le ON le critère qui relie les deux tables. Par ailleurs, pour éviter les ambiguïtés, il est bon de préciser table.champ au lieu du nom de champ seul quand le même nom apparaît dans les deux.
Je ne suis pas spécialiste non plus, les puristes amélioreront. En particulier je crois que quand le champ qui sert à la jointure est le même dans les deux tables, un
ON code_vendeurest suffisant. Et qu'avec un alias, l'écriture pourrait être un peu allégée.
Question subsidiaire : Si je ne veux que le nom du vendeur en sortie, comme apparemment les champs affichés sont déclarés dans le , comment doit-on s'y prendre ?
Merci encore.
Select nom_vendeur FROM et le reste de la requête inchangé.
Merci beaucoup le père, bonne fin d'après-midi.
Tu m'étonnes beaucoup,là, je ne vois pas le rapport.
Tu peux me coller le message d'erreur ? Ça m'évitera de créer les tables pour le refaire, parce que je n'aime pas ne pas comprendre.
Merci d'avance.
Toutes mes plates et mes confuses ;-[
J'étais persuadé qu'il fallait à tous prix que le champ du SELECT corresponde avec la table du FROM, mais apparemment ce n'est pas le cas, à cause du INNER JOIN ?