IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requête à critères multiples


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 26
    Points
    26
    Par défaut Requête à critères multiples
    Bonjour à tous,

    J'ai un soucis avec une requête et cela fait un moment que je planche dessus.
    Trois tables sont exploitées :

    • Recette (1,n)
    • Ingrédient (0,n)
    • Etre composer (Association entre Recette et Ingrédient) => clefs primaires (IdRecette, IdIngredient).


    Mon problème étant que je souhaite rechercher toutes les recettes ayant un certain type d'ingrédients. Par exemple avoir les recettes ayant des pommes ET des poires.

    Une idée ?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    essais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Select IDRecette,Sum(Case When (Ingrédient.nom=pommes) OR
                                                 (Ingrédient.nom=poires) 
                                         then 1
                                        else 0
                                 end
                               )
    from Recette 
    Inner join Etre_composer
    ON Recette.IdRecette=Etre_composer.IdRecette
    INNER JOIN Ingrédient
    On Ingrédient.IdIngredient=Etre_composer..IdIngredient
    Group by IDRecette
    Having Sum(Case When (Ingrédient.nom=pommes) OR
                                    (Ingrédient.nom=pommes) 
                            then 1
                            else 0
                    end
                    )=2

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT t1.IdRecette
    FROM (
      SELECT c1.IdRecette
      FROM Composer AS c1
      INNER JOIN Ingredient AS i1 ON i1.IdIngredient = c1.IdIngredient
      WHERE i1.Nom = 'Pomme'
    ) AS t1
    INNER JOIN (
      SELECT c2.IdRecette
      FROM Composer AS c2
      INNER JOIN Ingredient AS i2 ON i2.IdIngredient = c2.IdIngredient
      WHERE i2.Nom = 'Poire'
    ) AS t2 ON t2.IdRecette = t1.IdRecette
    Au début, je pensais à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT c.IdRecette
    FROM Composer AS c
    INNER JOIN Ingeredient AS i ON i.IdIngredient = c.IdIngredient
    WHERE i.Nom IN ('Pomme', 'Poire')
    GROUP BY c.IdRecette
    HAVING COUNT(*) > 1
    Mais si une recette à l'un des deux ingrédients (Pomme) et un autre (pas la poire), elle sera comptée aussi.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    Par défaut
    Dans ce cas Cinephil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING COUNT(DISTINCT I.Nom) = 2

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Pas sûr que ça marche non plus mais pas le temps de développer davantage maintenant.

    It's billiard time !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Alors merci à vous pour m'avoir répondu aussi vite .

    J'ai donc optez pour la seconde solution me paraissant plus familier que la première, et çà marche au poil.

    Merci .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête Père-Enfant avec critères multiples sur enfants
    Par gtaman dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/10/2013, 22h57
  2. [MySQL] Requête avec critères multiples
    Par malabarbe dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/01/2008, 12h54
  3. Requête à paramètres multiples
    Par b00tny dans le forum Oracle
    Réponses: 12
    Dernier message: 26/04/2006, 12h35
  4. Requête avec multiple clause where
    Par pgenet dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/03/2006, 14h59
  5. problème requête à jointure multiple...
    Par Ricardo_Tubbs dans le forum Access
    Réponses: 6
    Dernier message: 09/02/2006, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo