SQL : Requête un peu délicate...

Leyry Hynemonth

a découvert une nouvelle définition de l'ennui.
Club iGen
18 Décembre 2004
4 145
263
Nîmes
www.lyhn.fr
Hello ! :coucou:

Je suis en train de réaliser un devoir sur une base de données de films.

Entre Autres choses, j'ai les tables suivantes :

acteur(numacteur,nomActeur,prenomActeur,...) : La table qui contient les acteurs

film(numfilm,titreFilm,...) : La table des films

jouer(#numActeur,#numFilm,role,salaire) : La table qui répertorie les rôles que jouent les acteurs dans le film, et accessoirement, leur salaire.

recoitA(#numFestival,#numActeur,#numFilm, prix) : La table dans laquelle il il y à les récompenses attribuées à un acteur dans un film donné, lors d'un festival.

Voilà la question :

Sur la fiche d'un acteur, je souhaite obtenir la liste des films dans lesquels il a joué, son rôle.
Jusque-là, pas de souci.

Mais je souhaiterais aussi pour chaque rôle afficher le prix qu'on lui a décerné.

Et c'est là que je bloque : car si j'intègre le prix dans mon select et dans mes unions, je n'obtiens que les films pour lesquels l'acteur a reçu une récompense.
Donc s'il n'a pas reçu de récompense, il n'est pas affiché (puisque rien dans la table recoitA).
Alors que je veux TOUS les films de l'acteur.

Résultat souhaité par l'exemple :

Bloc de code:
[U]Acteur             Film            Rôle              Récompense   [/U] 
Dicarpachio       Titanic          Jack              Golden globe
Dicarpachio       La plage         Richard

Avez-vous une idée de comment de la tournure que doit prendre ma requête SQL ?

Merci pour votre aide :zen:
 
déjà, je comprends pas pourquoi tu crées autant de tables que de champs alors qu'une seule table avec tous tes champs suffirait pour ce que tu veux faire et éviterait les jointures entre tables qui alourdissent la requete pour rien
 
Hello !

Tu as certainement loupé le mot "devoir".
Ce qui veut dire que si la base ne te parait pas logique à 100%, ce n’est pas le problème.
L'objectif, c'est d'apprendre à faire du SQL.

D'autre part, j'ai présenté ici 4 tables ayant chacune au moins 4 champs... et l'exercice en contient d'autres qui ne sont pas concernées pour la requête que je cherche à faire.

Enfin, si je veut tout avoir sur la même table, avec des doublons, des données à saisir manuellement à chaque fois que je fais référence à quelque chose d'existant, et avoir un mal fou pour faire la moindre requête, pourquoi ne pas utiliser simplement une feuille de calcul Excel ?

Tous les acteurs n'ont pas forcément un prix dans un film, et certains acteurs ont plusieurs prix dans un même film...
Va gérer ça quand il n'y a qu'une ligne...

---------- Nouveau message ajouté à 23h29 ---------- Le message précédent a été envoyé à 23h05 ----------

Ha ben tien... en fait, c'est peut être une "jointure à gauche" ... je vais approfondir ça...

---------- Nouveau message ajouté à 23h58 ---------- Le message précédent a été envoyé à 23h29 ----------

SELECT jouer.numActeur, jouer.numFilm, jouer.role, recoitA.prixActeur
FROM jouer
LEFT JOIN recoitA
ON jouer.numActeur = recoitA.numActeur
AND jouer.numFilm = recoitA.numFilm;

Voilà.

Bonne nuit : :sleep: