Partage
  • Partager sur Facebook
  • Partager sur Twitter

Rechercche sur 3 tables

problème de logique

    22 mai 2018 à 18:15:47

    Bonjour à tous !

    Je me présente à vous car j'ai un petit soucis : je n'arrive pas à récupérer das valeurs dans ma base de données. Jusque là rien de méchant mais j'essaie de récupérer des valeurs dans trois tables différentes. Je m'explique...

    Voici ma requête :

    SELECT * 

    FROM Album,Film,Livre 

    WHERE Album.genre = (SELECT Theme.idTheme FROM Theme WHERE Theme;nomTheme`= "classique") 

    OR Film.theme = (SELECT Theme.idTheme FROM Theme WHERE Theme .nomTheme`= "classique") 

    OR Livre.genre = (SELECT Theme.idTheme from Theme WHERETheme.nomTheme`= "classique") 

    Je dispose d'une base de donnée avec des livres des albums et des films. Ils possedent tous un genre ou un theme( qui sont tous des int et font reference a la meme la chose leur noms diverge juste) qui est un INT et est une clé étrangère provenant de la table Theme qui une colonne IdTheme et une colonne nomTheme.

     Je souhaite récupérer les albums, les livres et les films qui ont même le thème à savoir classique dans ce cas précis. J'ai essayé la requete ci dessus mais j'obtiens un résultat avec aucune ligne.

    Pourriez vous m'aider ?

    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2018 à 20:10:53

      Bonsoir,

      Une représentation visuelle des tables et relations ainsi que quelques lignes de données exemple pourraient nous aider à répondre à ton problème.

      • Partager sur Facebook
      • Partager sur Twitter
      Contrôleur programmeur des finances publiques depuis le 01/10/18
        22 mai 2018 à 20:23:37

        Bonjour,

        Vu ce que tu essayes de faire, on dirait que tu ne connais pas les jointures, je me trompe ?

        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2018 à 21:33:45

          Voici le schema relationel de la base.

          Si si je connais les jointures ! 

          Mais j'ai essayé les jointures en joignant les tables a partir de idTheme et de genre/theme.

          Mais je n'y arrivai pas.

          J'ai envoyé cette requete car bien que fausse elle expliquait simplement ce que je voulais faire.

          Enfin je pense !

          -
          Edité par andyefomi 22 mai 2018 à 21:41:03

          • Partager sur Facebook
          • Partager sur Twitter
            22 mai 2018 à 22:07:17

            Le fait d'appeler la clé étrangère "genre" dans deux tables et "theme" dans la troisième n'est pas très logique mais la jointure parait relativement simple ici, on peut voir ce que tu avais fait ?
            • Partager sur Facebook
            • Partager sur Twitter
              22 mai 2018 à 22:20:55

              Oui bien sur avec grand plaisir !

              De base je ne voulais récupérer que les noms d'album, les noms de films et les noms de livre.

              J'ai par la suite changé en essayant avec * pour voir ce que la requête me retournait et corriger mes erreurs.

              Voila ce que j'avais essayé : 

              SELECT nomAlbum,nomFilm,nomLivre
              FROM Album,Film,Livre,Theme
              Where Album.genre=idTheme
              and Film.theme=idTheme
              and Livre.genre=idTheme
              And nomTheme = "classique"



              -
              Edité par andyefomi 22 mai 2018 à 22:32:33

              • Partager sur Facebook
              • Partager sur Twitter
                22 mai 2018 à 22:53:59

                Bon déjà avec cette syntaxe tu es limité aux jointures internes. C'est en fait l'équivalent de :

                SELECT nomAlbum,nomFilm,nomLivre FROM Album 
                INNER JOIN Theme ON Album.genre=idTheme
                INNER JOIN Film ON Film.theme=idTheme
                INNER JOIN Livre ON Livre.genre=idTheme
                WHERE nomTheme = "classique"

                Mais ça ne renverrait que les thèmes communs aux 3 tables, est-ce vraiment ce que tu veux faire ?

                • Partager sur Facebook
                • Partager sur Twitter
                  22 mai 2018 à 23:01:33

                  Oui ce que je veux c'est renvoyé les noms d'album de film et de livre qui ont le même thème.

                  Mais je n'ai pas réussi a faire fonctionner cette requête il n'y avait aucune ligne alors que mes tables sont rempli. Aurais-je fait une erreur ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 mai 2018 à 23:12:53

                    J'avoue que j'ai un peu du mal à visualiser sans exemple, tu peux donner un export de tes tables ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 mai 2018 à 23:19:08

                      Un export c'est a dire ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 mai 2018 à 23:55:45

                        Bonsoir,

                        Moi j'essaierais quelque chose comme ci-dessous. Je vous laisse tester.

                        SELECT nomOeuvre, Type
                        FROM (
                        (SELECT nomAlbum as nomOeuvre, genre as idTheme, "Album" as Type
                        FROM Album)
                        UNION ALL
                        (SELECT nomFilm as nomOeuvre, theme as idTheme, "Film" as Type
                        FROM Film)
                        UNION ALL
                        (SELECT nomLivre as nomOeuvre, genre as idTheme, "Livre" as Type
                        FROM Livre)
                        )
                        INNER JOIN Theme th ON idTheme = th.idTheme
                        WHERE th.nomTheme = "classique"
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Contrôleur programmeur des finances publiques depuis le 01/10/18
                          23 mai 2018 à 9:56:01

                          Merci beaucoup _Florent_ c'est exactement ce je voulais faire j'avais complètement oublié l’existence de UNION !

                          Je vous remercie tous les deux pour le temps que vous m'avez accordé 

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Rechercche sur 3 tables

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown