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 avec jointure externe


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut Requête avec jointure externe
    Bonjour,

    j'ai un problème avec une requête sur laquelle j'aimerais faire une jointure externe.
    J'ai 2 tables comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QUESTIONS (num_question, intitulé_question, reponse possibles)
    RESPONSES_PERSONNE (num_personne, num_question, reponse)
    Donc je veux faire une jointure entre ces 2 tables comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT q.num_questions, reponse, num_personne, intiulé_question
    FROM QUESTIONS q, REPONSES_PERSONNE s
    WHERE s.num_question =  q.num_question
    donc j'obtiens ainsi les questions pour lesquelles la personne a repondu avec ses réponses.
    Mais j'aimerais avoir aussi les questions pour lesquelles elle n'a pas repondu et avoir null. Car avec cette requête elle ne s'affiche pas.

    Si quelqu'un pouvait m'aider.[/code]

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    En supposant que tu as une table Personne (il est possible rajouter des WHERE pour restreindre les questions et les personnes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT q.num_questions, reponse, num_personne, intiulé_question 
    FROM QUESTIONS q CROSS JOIN PERSONNE p
         LEFT OUTER JOIN REPONSES_PERSONNE s ON s.num_question =  q.num_question
                                            AND s.num_personne =  p.num_personne
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    en fait j'ai mal expliquer mon prblème.
    Ma table questions a une colonne obligatoire ou non. Flag qui est à 1 si oui et à 0 sinon.

    Je dois vérifier que pour chaque questionnaire les questions obligatoires sont remplies.
    Pour cela je voudrais pour chaque question, faire un count qui serait à 0 pour chaque réponse obligatoire oublié et à 1 si elles ont été remplies.
    Exemple:
    Question réponse count(*) id_personne
    Q1 null 0 1
    Q2 Oui 1 1


    Est il possible de faire cela?

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Si tu veux être sure d'avoir une réponse pertinente, donne les create de tes tables, les insert qui vont avec, et le résultat que tu espère.
    En attendant, essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT q.num_questions, reponse, num_personne, intiulé_question, count(s.num_personne)
    FROM QUESTIONS q CROSS JOIN PERSONNE p 
         LEFT OUTER JOIN REPONSES_PERSONNE s ON s.num_question =  q.num_question 
                                            AND s.num_personne =  p.num_personne	
    WHERE q.Obligatoire = 1
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    Je ne comprends pas pourquoi je dois faire un cross jion avec la table personne?

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Si tu as 3 personnes et 5 questions dont 2 obligatoires, et si j'ai bien compris que tu veux, pour chaque personne et chaque question obligatoire un indicateur si la personne a répondu ou non, il te faut bien les 3 x 2 = 6 lignes qui correspondent au CROSS JOIN.
    Maintenant tu peux peut-être réduire le nombre de personnes avec un filtre, mais cela devient du fonctionnel...
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  7. #7
    Membre régulier Avatar de Titouf
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 177
    Points : 95
    Points
    95
    Par défaut
    Ben moi jai une question sur les jointures externes, c'est un truc que j'ai vraiment du mal à comprendre... je ne sais pas, je n'accroche pas...
    Alors, il parait qu'on peut se servir de (+) plutot que d'utiliser le CROSS JOIN?
    mais comment ça marche?
    Avez vous une méthode?

    Moi, j'y arrive à peu près pour une requete simple avec deux tables (avec une jointure) mais c'est quand ça se complique.... pppfffff!!!
    Merci d'avance.

  8. #8
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    (+) = syntaxe de la jointure externe avec ORACLE avant la version 9i
    CROSS JOIN = produit cartésien et non jointure externe.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  9. #9
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par Titouf
    mais comment ça marche?
    Avez vous une méthode?
    Un peu de théorie : http://sql.developpez.com/sqlaz/jointures/#L2.3
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

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

Discussions similaires

  1. Requête avec jointures externes
    Par developpeur71 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 18/06/2010, 13h03
  2. Requête avec jointure externe
    Par Neuromancien2 dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/04/2008, 00h47
  3. Requête avec jointure externe complexe
    Par dpin33 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 04/03/2008, 13h41
  4. optimisation requête avec jointures externes
    Par beurtom dans le forum Oracle
    Réponses: 14
    Dernier message: 16/10/2006, 16h50
  5. requête avec jointure externe
    Par GMI3 dans le forum Oracle
    Réponses: 8
    Dernier message: 12/04/2006, 10h29

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