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

Requêtes MySQL Discussion :

Requete équivalente à "ALL(champs) IN (SELECT . . ."


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut Requete équivalente à "ALL(champs) IN (SELECT . . ."
    Bonjour,

    Voici mon problème :
    Je dispose de 4 tables :
    eleves : liste les eleves
    competences : liste les competences à acquérir par les élève
    competences_validees : liste les competences validées par un élève
    exercices : liste les exercices
    competences_exercices : liste les competences que traite un exercice.

    Mon objectif est de sortir la liste des exercices qu'un élèves peut réaliser à partir des competences qu'il a déjà validées.
    Par exemple :
    exercice 1 traite des competences 1,2 et 3
    exercice 2 traite des competences 1 et 4

    L'élève a validé les competences 1,2,3 et 5.
    La requête doit me retourner l'exercice 1 uniquement.

    Voici la structure générale de ce que j'aimerai faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * 
    from exercices e,competences_exercices ce 
    WHERE e.id_exercice = ce.id_exercice 
      AND ALL(ce.id_competence) IN (
        SELECT id_competence 
        FROM competences_validees WHERE id_eleve='1')
    Bien entendu le ALL comme cela n'existe pas, mais j'ai écris cela pour que vous compreniez ce que je cherche à faire.

    Mes cours de SQL sont un peu loin dans mon esprit...et je bloque sur cette requête...
    Une âme charitable accepterait-elle de m'aider ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Mes cours de SQL sont un peu loin dans mon esprit
    Pour les cours de SQL, c'est chez SQLPro !

    Notamment, les jointures s'écrivent depuis 1992 avec l'opérateur JOIN.

    liste des exercices qu'un élèves peut réaliser à partir des competences qu'il a déjà validées
    Il nous faudrait la structure des tables pour pouvoir t'aider efficacement.

    Essaie cette requête et dis-nous si elle répond à ton besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT -- les colonnes nécessaires et pas *
    FROM exercices e
    INNER JOIN competences_exercices ce ON e.id_exercice = ce.id_exercice 
        INNER JOIN competences_validees cv ON cv.id_competence = ce.id_competence
    WHERE cv.id_eleve = 1
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut
    Salut CinePhil,

    Merci pour ta réponse. Effectivement la jointure fait partie des mauvaises habitudes que j'ai prise à mon boulot. je rectifie !

    Pour *, c'est simplement que je préfère mettre ça pendant l'élaboration de mes requêtes, et détaillé les champs une fois que j'ai la requête qu'il me faut

    Pour la structure, la voici :

    Eleves : id_eleve (varchar(15)), nom, prenom
    Competences : id_competence (int), libelle_competence
    competences_validees : id_eleve, id_competence
    exercice : id_exercice (int), reference_exercice
    competences_exercices: id_competence,id_exercice


    La requête que tu me proposes me retourne les exercices traitant d'au moins une compétence que l'élève a validé... ça ne correspond donc pas à ce qu'il me faut.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Alors essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT e.id_exercice
    FROM exercices e
    WHERE NOT EXISTS
    (
        SELECT *
        FROM competences_exercices ce
        WHERE ce.id_exercice = e.id_exercice
            AND ce.id_competence NOT IN 
            (
                SELECT cv.id_competence
                FROM competences_validees cv
                WHERE cv.id_eleve = 1
            )
    )
    Cette requête devrait donner les exercices pour lesquels il n'existe pas de compétence non présente dans les compétences validées par l'élève 1.

    Comme je dois partir, je n'ai pas le temps de voir si c'est simplifiable.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut
    A priori, ça semble ...... parfait !
    Merci beaucoup.

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

Discussions similaires

  1. Requête avec champ NULL simple quote
    Par tidou95220 dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/07/2012, 13h15
  2. Requete fichier .js VBA EXCEL REALTIME FX QUOTES
    Par tiuse75016 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 29/05/2010, 18h51
  3. Les quotes dans ma requête "select"
    Par Jonathan_pingu dans le forum SQL
    Réponses: 37
    Dernier message: 14/05/2009, 10h53
  4. [VBnet][Access] Requete imbriquee "insert + select"
    Par Fab62_ dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/03/2006, 13h58

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