p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Fxg
    Fxg est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : septembre 2003
    Messages : 455
    Points : 569
    Points
    569

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    6 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 317
    Points : 12 807
    Points
    12 807
    Billets dans le blog
    3

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Ingenieur de recherche - Ecologue
    Inscrit en
    juin 2003
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : juin 2003
    Messages : 1 020
    Points : 1 368
    Points
    1 368

    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
    455
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : septembre 2003
    Messages : 455
    Points : 569
    Points
    569

    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
    455
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : septembre 2003
    Messages : 455
    Points : 569
    Points
    569

    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
    Ingenieur de recherche - Ecologue
    Inscrit en
    juin 2003
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : juin 2003
    Messages : 1 020
    Points : 1 368
    Points
    1 368

    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
    455
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : septembre 2003
    Messages : 455
    Points : 569
    Points
    569

    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
    Ingenieur de recherche - Ecologue
    Inscrit en
    juin 2003
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : juin 2003
    Messages : 1 020
    Points : 1 368
    Points
    1 368

    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
    455
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : septembre 2003
    Messages : 455
    Points : 569
    Points
    569

    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.

Discussions similaires

  1. Problème de jointure sur plusieurs tables
    Par papouuu dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/01/2011, 14h02
  2. [AC-2007] Jointure sur plusieurs tables
    Par Steph0 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 20/01/2011, 08h24
  3. jointure sur plusieurs tables fonctionne pas
    Par jmsch dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/11/2010, 21h55
  4. Jointures sur plusieurs tables
    Par Daibai dans le forum Requêtes
    Réponses: 3
    Dernier message: 17/12/2009, 09h55
  5. hibernate-criteria : jointure sur plusieurs tables
    Par loic72 dans le forum Hibernate
    Réponses: 9
    Dernier message: 24/09/2007, 17h27

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