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 :

inner join conditionné


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 113
    Points : 74
    Points
    74
    Par défaut inner join conditionné
    Bonjour,

    j'ai le problème suivant :

    je doit rechecher la même donnée id_language dans 2 tables relationnelles (language_native et language_fluent) mais je veux afficher les résultats que si j'ai id_language dans language_native ET/OU language_fluent

    comment dois-je donc écrire ma requete SQL pour avoir cette condition ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM people people LEFT OUTER JOIN ... (autres conditions )
    INNER JOIN language_native pln ON people.id_people = pln.id_people AND pln.id_language = $id_language
    INNER JOIN language_fluent plf ON people.id_people = plf.id_people AND plf.id_language = $id_language
    en écrivant le code de cette manière (ci-dessus) les 2 conditions doivent être vrai, le problème est que je veux que l'1 des 2 conditions soit vrai seulement et pas les 2

    Comment puis-je faire ?

    Merci

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Pourquoi mettre en condition de jointure ce qui devrait être dans la restriction ?
    La jointure est faite pour donner les lignes de language_native (ou de language_fluent) en correspondance avec people. A propos, pourquoi avoir mis en alias le nom de la table ? Parfaitement inutile !
    La restriction limitera ces lignes à l'id_language souhaité.
    Par contre, tu devrais peut-être utiliser des jointures externes plutôt que des jointures internes. As-tu la garantie que chaque people a au moins une ligne dans les deux tables ?

    Donc ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * 
    FROM people p 
    LEFT OUTER JOIN ... (autres conditions )
    LEFT OUTER JOIN language_native pln ON p.id_people = pln.id_people 
    LEFT OUTER JOIN language_fluent plf ON p.id_people = plf.id_people 
    WHERE plf.id_language = $id_language 
      OR pln.id_language = $id_language
    Autre chose...
    Le SELECT * va te retourner toutes les colonnes de toutes les tables existant dans la requête. Tu as vraiment besoin de tout ça ?
    Pense à la maintenance et ne demande que les colonnes dont tu as besoin.

  3. #3
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Cinephil, la jointure externe ne résoud pas le fait qu'il veut qu'une seule des deux conditions soit vraie...

    On peut exprimer le "ou exclusif" explicitement avec des OR des AND et des NOT...

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Cinephil, la jointure externe ne résoud pas le fait qu'il veut qu'une seule des deux conditions soit vraie...

    On peut exprimer le "ou exclusif" explicitement avec des OR des AND et des NOT...
    Il ne veut pas un ou exclusif :
    que si j'ai id_language dans language_native ET/OU language_fluent
    ET/OU chez moi c'est un ou inclusif donc un simple OR.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 113
    Points : 74
    Points
    74
    Par défaut
    c'est bien ça parfait

    (c'est bien un ou inclusif que je veux faire)

    j'ai encore un peu de mal avec les LEFT OUTER JOIN et autres INNER JOIN... je suis donc encore un peu perdu,
    je reprend un code existant et je n'avais pas du tout pensé que l'on pouvait faire un WHERE sur une table jointe puisque pour moi l'équivalant du WHERE dans une jointure est le ON mais on peu donc combiner les 2.

    c'est super je viens d'apprendre un nouveau truc en SQL
    ça va beaucoup m'aider pour la suite

    Encore merci à vous.

    rq :
    concernant le SELECT * c'était juste pour simplifier la requête d'exemple mais effectivement je ne récupère que les colonnes dont j'ai besoin.

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

Discussions similaires

  1. Mysql Inner join
    Par ..:: Atchoum ::.. dans le forum Requêtes
    Réponses: 3
    Dernier message: 25/10/2007, 12h21
  2. Nombre de clauses ON dans un INNER JOIN
    Par Shadow aok dans le forum Requêtes
    Réponses: 5
    Dernier message: 30/06/2004, 15h42
  3. [ requeste sql ]INNER JOIN / OUTER JOIN
    Par hocinema dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/04/2004, 21h28
  4. Erreur lors d'une requete INNER JOIN
    Par k-lendos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/03/2004, 15h09
  5. Inner Join & Select
    Par bakaneko dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/02/2004, 10h48

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