De jointures à Sous-requêtes
Fermé
SHAPE_OF_DESPAIR
Messages postés
7
Date d'inscription
mercredi 8 février 2017
Statut
Membre
Dernière intervention
16 février 2017
-
Modifié par jordane45 le 13/02/2017 à 13:54
SHAPE_OF_DESPAIR Messages postés 7 Date d'inscription mercredi 8 février 2017 Statut Membre Dernière intervention 16 février 2017 - 16 févr. 2017 à 13:28
SHAPE_OF_DESPAIR Messages postés 7 Date d'inscription mercredi 8 février 2017 Statut Membre Dernière intervention 16 février 2017 - 16 févr. 2017 à 13:28
A voir également:
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de pomme mais pas de pomme de terre ?
- Impossible de supprimer une page word - Guide
- Google moteur de recherche page d'accueil - Guide
- Word numéro de page 1/2 - Guide
- Jeux serpent pomme - Guide
- Web office - Guide
1 réponse
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
13 févr. 2017 à 11:47
13 févr. 2017 à 11:47
Bonjour,
Je n'ai pas trop compris s'il fallait garder ou non un INNER JOIN.
Si oui, a priori, il s'agit d'intégrer la condition Espece.nom_courant = 'chien' au sein de la clause INNER JOIN. Pour cela il faut définir une sous-table sous la forme d'un simple SELECT qui renvoie les champs dont on a besoin.
Cela se code de la façon suivante :
On a donc un sous-ensemble de Espece, nommé e, qui contient juste la colonne id, et juste les lignes où nom_courant = 'chien'.
Une autre solution, si tu ne dois pas garder le INNER JOIN, est d'utiliser un champ IN, en gardant la même sous-requête :
Dans les deux cas, le principe reste le même : identifier le sous-ensemble de la table Espèce qui contient les données nécessaires.
Xavier
Je n'ai pas trop compris s'il fallait garder ou non un INNER JOIN.
Si oui, a priori, il s'agit d'intégrer la condition Espece.nom_courant = 'chien' au sein de la clause INNER JOIN. Pour cela il faut définir une sous-table sous la forme d'un simple SELECT qui renvoie les champs dont on a besoin.
Cela se code de la façon suivante :
SELECT Race.nom AS Race FROM Race INNER JOIN (SELECT id FROM Espece WHERE nom_courant = 'chien') e ON Race.espece_id = e.id WHERE Race.nom LIKE '%berger%';
On a donc un sous-ensemble de Espece, nommé e, qui contient juste la colonne id, et juste les lignes où nom_courant = 'chien'.
Une autre solution, si tu ne dois pas garder le INNER JOIN, est d'utiliser un champ IN, en gardant la même sous-requête :
SELECT nom AS Race FROM Race WHERE espece_id IN (SELECT id FROM Espece WHERE nom_courant = 'chien') AND nom LIKE '%berger%';
Dans les deux cas, le principe reste le même : identifier le sous-ensemble de la table Espèce qui contient les données nécessaires.
Xavier
13 févr. 2017 à 16:11
L'idée de base était en effet de supprimer le INNER JOIN.
Dites, par "identifier le sous-ensemble", parlez-vous dans le cas présent de l'élément 'chien' dans nom_courant ? Est-ce exact ?
14 févr. 2017 à 10:00
On peut aussi retourner les requêtes, et sélectionner sur Espece avec jointure sur Race, auquel cas le sous-ensemble devient les Races ayant "berger" dans leur nom.
Cette souplesse ne fonctionne qu'avec un INNER JOIN, un des intérêts de cette clause qui peut paraître obscure de prime abord.
Ce qui donne :
16 févr. 2017 à 13:28