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

SQL Firebird Discussion :

Jointures sur plusieurs tables


Sujet :

SQL Firebird

  1. #1
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    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 retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    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
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    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 ?)
    Merci d'ajouter un sur les tags qui vous ont aidé

  4. #4
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    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 éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    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 expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    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.
    Merci d'ajouter un sur les tags qui vous ont aidé

  7. #7
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    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 expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    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
    Merci d'ajouter un sur les tags qui vous ont aidé

  9. #9
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    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