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.
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 ?
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"
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 ?
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"
Contrôleur programmeur des finances publiques depuis le 01/10/18
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é
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.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.