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 :

Jointure externe avec clause WHERE


Sujet :

Langage SQL

Vue hybride

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Par défaut Jointure externe avec clause WHERE
    Bonjour à tous,
    Je possède trois tables:
    - La table VIDEOCLUB décrit des videoclubs:
    VIDEOCLUB_ID: Entier, clé primaire
    VIDEOCLUB_LIB: Texte, nom du vidéoclub

    - La table CATEGORIE décrit des catégories de film:
    CATEGORIE_ID : Entier, clé primaire
    CATEGORIE_LIB: Texte, libellé de la catégorie ('Science-fiction', 'comédie', etc.)

    - La troisième table, VID_CAT, décrit les catégories de film dont disposent les différents videoclubs:
    FK_CATEGORIE_ID: entier, clé étrangère liée à la colonne CATEGORIE_ID de la table CATEGORIE
    FK_VIDEOCLUB_ID: entier, clé étrangère liée à la colonne VIDEOCLUB_ID de la table VIDEOCLUB
    Ainsi, un enregistrement de la table VID_CAT associe un vidéoclub à une catégorie de film dont il dispose. Cette table associe donc chaque vidéoclub aux catégories de films qu'il propose à la location.

    J'aimerais écrire une requête qui me remonte les id et libellé des catégories associées à un vidéoclub donné ("WHERE VIDEOCLUB.VIDEOCLUB_ID = xxx"), mais également de toutes les autres catégories de la table CATEGORIE. L'idée est d'avoir dans les colonnes sélectionnées, en plus des id et libellé des catégories, une colonne qui m'indique pour chaque catégorie si elle est disponible dans le vidéoclub donné.

    Autrement dit, je souhaite afficher les id et libellé de toutes les catégories de la table CATEGORIE, mais avec une colonne supplémentaire m'indiquant, pour un id de vidéoclub fourni à ma requête, si la catégorie retournée est disponible pour le vidéoclub donné.

    J'imagine que c'est un problème assez simple, il doit y avoir quelque chose que je n'ai pas compris dans la théorie des jointures externes, car j'ai beau essayer de différentes manières, je n'obtiens pas le résultat recherché...
    Quelqu'un saurait m'aider?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Donne nous la structure de ta requête actuelle, nous pourrons alors essayer de t'aider à l'améliorer.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Par défaut
    Bon, soyez sympas m'engueulez pas si j'ai rien compris aux jointures...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT CATEGORIE.CATEGORIE_ID, CATEGORIE.CATEGORIE_LIB, VID_CAT.FK_VIDEOCLUB_ID
    FROM CATEGORIE, VID_CAT
    WHERE CATEGORIE.CATEGORIE_ID = VID_CAT.FK_CATEGORIE_ID(+)
    AND VIDEOCLUB.VIDEOCLUB_ID = 4

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CATEGORIE.CATEGORIE_ID, CATEGORIE.CATEGORIE_LIB, VID_CAT.FK_VIDEOCLUB_ID
    FROM CATEGORIE, VID_CAT
    WHERE CATEGORIE.CATEGORIE_ID = VID_CAT.FK_CATEGORIE_ID(+)
    AND VIDEOCLUB.VIDEOCLUB_ID (+)= 4
    Mais c'est beaucoup plus beau avec une jointure normalisée
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Par défaut
    Pardon je me suis trompé dans ma requête, en réalité c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT CATEGORIE.CATEGORIE_ID, CATEGORIE.CATEGORIE_LIB, VID_CAT.FK_VIDEOCLUB_ID
    FROM CATEGORIE, VID_CAT
    WHERE CATEGORIE.CATEGORIE_ID = VID_CAT.FK_CATEGORIE_ID(+)
    AND VID_CAT.FK_VIDEOCLUB_ID = 4
    J'ai essayé avec ta méthode, cela ne me ramène que les catégories liées au vidéoclub dont j'ai fourni l'ID.

  6. #6
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Tout d'abord si j'ai bien compris tu veux liste toutes tes catégories, mais tenter a chaques fois une jointeur vers VID_CAT, ainsi si on ne trouve rien de correspondant dans VID_CAT pour ta catégorie, il affiche quand meme la catégorie, mais ans informations supplémentaires.

    Si j'ai bien compris ca donnerais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT CATEGORIE.CATEGORIE_ID, CATEGORIE.CATEGORIE_LIB, VID_CAT.FK_VIDEOCLUB_ID
    FROM CATEGORIE
    LEFT JOIN VID_CAT
    ON CATEGORIE.CATEGORIE_ID = VID_CAT.FK_CATEGORIE_ID(+)
    WHERE VID_CAT.FK_VIDEOCLUB_ID = 4

Discussions similaires

  1. Jointure externe avec prédicat dans la clause de jointure
    Par aflp91 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 08/12/2006, 00h23
  2. Pb de jointure externe avec un number
    Par mch_27 dans le forum Oracle
    Réponses: 2
    Dernier message: 07/03/2006, 15h33
  3. [SQL] jointure externe avec 3 tables, comment faire ....
    Par grumbok dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/08/2005, 16h13
  4. Petit souci avec clause where
    Par ybruant dans le forum SQL
    Réponses: 1
    Dernier message: 21/07/2005, 22h10
  5. jointure externe avec un where, me pose problème!
    Par Danae dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/07/2005, 17h37

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