Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Fxg
    Fxg est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : septembre 2003
    Messages : 446
    Points : 557
    Points
    557

    Par défaut Jointures sur plusieurs tables

    Bonjour

    Pour simplifier, j'ai dans ma base trois tables :
    Livres (num_livre, titre, num_auteur, num_dessinateur, num_coloriste, num_genre)
    Auteurs (num_auteur, nom, prenom, ecrit, dessine, colorie)
    Genres (num_genre, genre)

    ecrit, dessine et colorie servent à identifier si un auteur est un écrivain et/ou un dessinateur et/ou un coloriste.

    J'aimerais (simplement) pouvoir afficher :
    titre, nom, prenom genre

    J'ai écrit la requête suivante :

    Code :
    1
    2
    3
    4
    SELECT LIVRES.titre, AUTEURS.prenom || ' ' || AUTEURS.nom
    FROM LIVRES 
    INNER JOIN AUTEURS on LIVRES.num_auteur=AUTEURS.num_auteur
    ORDER BY LIVRES.titre
    mais je n'arrive pas à intégrer les jointures sur num_dessinateur, num_coloriste et num_genre.

    Sans doute du à mon niveau débutant en SQl, mais aussi peut-être à une erreur de conception dans mon modèle.

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de SergioMaster
    Homme Profil pro Serge Girard
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    5 404
    Détails du profil
    Informations personnelles :
    Nom : Homme Serge Girard
    Âge : 58
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 5 404
    Points : 10 592
    Points
    10 592

    Par défaut

    Bonjour,

    Je ne suis pas sur de vraiment répondre à la demande .
    Si pour un Livre on a
    - Un Auteur
    - Un Dessinateur
    - Un Coloriste

    Alors, en utilisant des Alias pour les tables

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT L.titre, A.prenom || ' ' || A.nom as Auteur,
               D.prenom || ' ' || D.nom AS Dessinateur,
               C.prenom || ' ' || C.nom AS Coloriste,
               G.Genre
    FROM LIVRES L
    INNER JOIN AUTEURS A ON L.num_auteur=A.num_auteur
    INNER JOIN AUTEURS D ON L.num_dessinateur=D.num_auteur
    INNER JOIN AUTEURS C ON L.num_coloriste=C.num_auteur
    INNER JOIN GENRES G ON L.Num_genre=G.Num_genre
    ORDER BY LIVRES.titre
    on aura la réponse souhaitée

    Maintenant si un livre n'a par exemple pas de Coloriste [NULL] , il n'apparaitra pas dans la liste a cause du INNER JOIN . Si à la place de INNER on met un LEFT , alors on obtiendras une liste de tous les livres , que les 'intervenants' (auteur,dessinateur,coloriste) soient indiqués ou non .

    un bon petit tutoriel sur les jointures
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  3. #3
    Membre Expert
    Homme Profil pro Olivier Dehorter
    Ingenieur de recherche - Ecologue
    Inscrit en
    juin 2003
    Messages
    977
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier Dehorter
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : juin 2003
    Messages : 977
    Points : 1 322
    Points
    1 322

    Par défaut

    il me semble qu'ajouter une table serait plus judicieux:

    Type_Auteurs (num_auteur, Type_Auteurs)
    Type_auteurs contenant : ecrit, dessine et colorie

    et revoir la table Livres afin d'en éliminer les "auteurs" pour réaliser une table des auteurs d'un livre (il peut avoir plusieurs auteurs par livre, non ?)

  4. #4
    Fxg
    Fxg est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : septembre 2003
    Messages : 446
    Points : 557
    Points
    557

    Par défaut

    @ Olivier : C'est un projet purement personnel. Dans le schéma il est prévu un auteur et un coauteur. Sinon je renseigne auteur à Collectif et le détail sera fait dans un champ commentaire.

    @ Sergio : pour le tuto je l'avais bien évidemment imprimé et parcouru ainsi que d'autres, mais ce qui me pertubait était le fait que num_auteur, num_coloriste et num_dessinateur de la table LIVRES renvoient à AUTEURS.Num_auteur
    Pour la différence entre INNER, LEFT et RIGHT j'aivais intégré et remplacé mon INNER par un LEFT plus juste dans mon cas.

    je vais tester avec les alias et j'espère mettre un tag Résiolu. Merci

  5. #5
    Fxg
    Fxg est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : septembre 2003
    Messages : 446
    Points : 557
    Points
    557

    Par défaut

    Merci cela correspond bien au résultat que je voulais.

    Quelques remarques :
    Après le ORDER il faut L.titre et pas LIVRES.titre

    plus sérieusement, est ce qu'il y a surtout en terme de performance une limitation sur le nombre de jointures que je peux utiliser.
    et je ne vois pas bien l'intérêt de passer par une table "intermédiaire" type_Auteurs.

    Merci encore

  6. #6
    Membre Expert
    Homme Profil pro Olivier Dehorter
    Ingenieur de recherche - Ecologue
    Inscrit en
    juin 2003
    Messages
    977
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier Dehorter
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : juin 2003
    Messages : 977
    Points : 1 322
    Points
    1 322

    Par défaut

    Citation Envoyé par Fxg Voir le message
    plus sérieusement, est ce qu'il y a surtout en terme de performance une limitation sur le nombre de jointures que je peux utiliser.
    Non
    Citation Envoyé par Fxg Voir le message
    et je ne vois pas bien l'intérêt de passer par une table "intermédiaire" type_Auteurs.
    Cela respecte plus les normes dans la construction des bases de données. Imagines que vous devez ajouter une nouvelle catégorie d'auteurs par ex les peintres... vous devrez ajouter une nouvelle colonne, ce qui n'est pas du tout le cas avec une table "intermédiaire" type_Auteurs.

  7. #7
    Fxg
    Fxg est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : septembre 2003
    Messages : 446
    Points : 557
    Points
    557

    Par défaut

    Merci cela est beaucoup plus clair.

    Mais si je rajoute une nouvelle catégorie "d'auteurs" il faudra aussi que je rajoute un nouveau champ dans ma table LIVRES par exemple num_peintre ou il y a t il une autre possibilité sur ce cas (simple)

  8. #8
    Membre Expert
    Homme Profil pro Olivier Dehorter
    Ingenieur de recherche - Ecologue
    Inscrit en
    juin 2003
    Messages
    977
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier Dehorter
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : juin 2003
    Messages : 977
    Points : 1 322
    Points
    1 322

    Par défaut

    Citation Envoyé par Fxg Voir le message
    Merci cela est beaucoup plus clair.

    Mais si je rajoute une nouvelle catégorie "d'auteurs" il faudra aussi que je rajoute un nouveau champ dans ma table LIVRES par exemple num_peintre ou il y a t il une autre possibilité sur ce cas (simple)
    non il suffit d'une colonne supplémentaire 'type_oeuvre' par exemple

  9. #9
    Fxg
    Fxg est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : septembre 2003
    Messages : 446
    Points : 557
    Points
    557

    Par défaut

    Merci à tous les deux et à bientôt pour sans doute d'autres questions ici où sur le forum Delphi

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •