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

 MySQL Discussion :

Jointure de sélection


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 102
    Par défaut Jointure de sélection
    BOnjour je sais que vous allez me huer (en voyant ma requête) , mais depuis hier j'ai un souci avec cela

    demande || Relation || epreuve
    ------ || ------ || --------
    id_demande || id || id_epreuve
    id_utilisateur || id_utilisateur || code_section
    code_section || id_epreuve || .....
    ....
    ...


    Donc j'explique ma requête :
    Je souhaite selectionner toutes les demandes dont le code_section= '120'
    Ensuite selectionner toutes les demandes où l'utilisateur ne se trouve pas dans la table relation avec l'id_epreuve=2 par exemple.


    et voilà ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT `d`.* 
    FROM `Demande` AS `d` 
    LEFT JOIN `Relationepreuve` AS `r` ON r.id_epreuve='2' 
    WHERE (d.code_section = 120303 
      and d.id_utilisateur NOT IN (
        select id_utilisateur 
        from Relationepreuve 
        where id_epreuve =2 
    ))
    c'est un petit peu beaucoup du bricolage, mais ça marche quelqu'un pourrait m'aider à l'améliorer ??

    Ps: et normalement je dois faire aussi une jointure avec epreuve , mais pour l'instant je me limite à deux ^^

  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
    demande || Relation || epreuve
    ------ || ------ || --------
    id_demande || id || id_epreuve
    id_utilisateur || id_utilisateur || code_section
    code_section || id_epreuve || .....
    Ceci n'étant pas clair, et d'après ta requête, je crois comprendre que ta structure est la suivante :
    Demande (id_demande, id_utilisateur, code_section)
    Relationepreuve (id, id_utilisateur, id_epreuve)
    Epreuve (id_epreuve, code_section)

    Ton besoin :
    Je souhaite selectionner toutes les demandes dont le code_section= '120'
    La réponse la plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_demande
    FROM Demande
    WHERE code_section = 120
    Second besoin :
    Ensuite selectionner toutes les demandes où l'utilisateur ne se trouve pas dans la table relation avec l'id_epreuve=2 par exemple.
    Si ceci veut dire :
    "Sélectionner toutes les demandes ne concernant pas l'épreuve 2"

    Alors la requête est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT d.id_demande
    FROM Demande AS d
    LEFT OUTER JOIN Relationepreuve AS r ON d.id_utilisateur = r.id_utilisateur
    WHERE r.id_epreuve = 2
      AND r.id_utilisateur IS NULL
    Dans ta requête, tu fais une jointure entre Demande et Relationepreuve mais ta condition de jointure est en fait une restriction sur les données de la table Relationepreuve et ne dicte pas sur quelles colonnes se fait la jointure. En conséquence, comme il n'y a apas vraiment de condition de jointure entre les deux tables, le SGBD fait un produit cartésien.
    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 confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 102
    Par défaut
    Bon en fait le principe est :
    je crée une épreuve avec un code_section (par exemple section 19899).
    Ensuite je recherche toutes les demandes ayant ce même code section ,
    et pour finir je cherche si ces demandes n'ont pas déjà une relation de faite.Alors je les affiche.

    Ma requête marche mais bon c'est de la carabistouille , j'aimerais bien en voir une meilleure pour que je puisse mieux comprendre ces histoires de jointures

    ps : merci pour votre aide CinePhil , mais en essayant votre requête, elle ne répond pas à ce que la mienne fait.

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

Discussions similaires

  1. Jointure et sélection par count
    Par Cyberbob002 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/02/2007, 14h48
  2. Table resultant d'une requete sélection dans une jointure
    Par moabomotal dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/02/2007, 13h42
  3. Sélection du plus récent avec jointure
    Par nicovmd dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/10/2005, 10h26
  4. Requete sélection, Jointure (coup de pouce needed)
    Par Odilon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/10/2005, 11h48
  5. Table de relation et sélection via jointure
    Par 73672 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 09/11/2004, 09h33

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