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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Points : 84
    Points
    84
    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 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 099
    Points : 28 396
    Points
    28 396
    Par défaut
    Donne nous la structure de ta requête actuelle, nous pourrons alors essayer de t'aider à l'améliorer.

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Points : 84
    Points
    84
    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 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 099
    Points : 28 396
    Points
    28 396
    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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Points : 84
    Points
    84
    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
    Expert confirmé

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

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Points : 84
    Points
    84
    Par défaut
    Pas mieux, ça ne me ramène encore que les catégories liées au vidéoclub dont l'ID vaut 4.
    Mais merci pour ta réponse!

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 099
    Points : 28 396
    Points
    28 396
    Par défaut
    Comme ça :
    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
    LEFT JOIN VID_CAT
    ON CATEGORIE.CATEGORIE_ID = VID_CAT.FK_CATEGORIE_ID
    AND VID_CAT.FK_VIDEOCLUB_ID = 4
    Je t'encourage à consulter le cours sur les Jointures de SQLPro

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Points : 84
    Points
    84
    Par défaut
    Pas mieux...
    J'ai déjà consulté le cours de sqlPro et essayé différentes choses, mais je n'y arrive pas.

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 975
    Points
    52 975
    Billets dans le blog
    6
    Par défaut
    SQLpro vous répond donc... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT C.*, VID_CAT.FK_VIDEOCLUB_ID,
           CASE 
              WHEN C.CATEGORIE_ID = V.FK_CATEGORIE_ID THEN 1 
              ELSE 0
           END AS DISPO 
    FROM   CATEGORIE AS C
           CROSS JOIN VID_CAT AS V
    WHERE  VIDEOCLUB.VIDEOCLUB_ID = 4
    A +

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Points : 84
    Points
    84
    Par défaut
    Merci pour votre réponse.
    Malheureusement, cette syntaxe ne semble pas être accepté par le SGBD avec lequel je suis obligé de composer, en l'occurence Hyperfile (Windev/Webdev).
    Je trouverai bien autre chose, en tout cas merci pour vos réponses à tous!

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