Bonjour,
Soit le schéma suivant :
| ----------- | ------------- | --------------------- | ------------ |
| Schema | Table | Column | Type |
| ----------- | ------------- | --------------------- | ------------ |
| Mes_livres | oeuvre | oeuvre_id | INT |
| Mes_livres | oeuvre | oeuvre_titre | VARCHAR(255)
| Mes_livres | contributeur | contributeur_id | INT
| Mes_livres | contributeur | contributeur_nom | VARCHAR(255) |
| Mes_livres | contributeur | contributeur_prenom | VARCHAR(255) |
| Mes_livres | contributeur | pseudo | TINYINT(1) *
| Mes_livres | signer | fk_contributeur_id | INT |
| Mes_livres | signer | fk_pseudonyme_id | INT
| Mes_livres | fonction | fonction_id | INT |
| Mes_livres | fonction | fonction_nom | VARCHAR(255)
| Mes_livres | participer | fk_contributeur_id | INT |
| Mes_livres | participer | fk_fonction_id | INT |
| Mes_livres | participer | fk_oeuvre_id | INT |
| ----------- | ------------- | --------------------- | ------------ |
* booléen
Avec la requête suivante, j'affiche des œuvres avec leurs contributeurs et la fonction de ces derniers :
La requête n’intègre pas pour l’instant la table "signer". Cette table (issue d'une relation réflexive) contient 2 clés étrangères référençant chacune le champ "contributeur_id" de la table "contributeur". Elle conceptualise la notion de pseudonyme (1 contributeur peut avoir 0, 1 ou plusieurs pseudonymes).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 SELECT o.oeuvre_id, cb.contributeur_id, cb.contributeur_nom,cb.contributeur_prenom, f.fonction_id,f.fonction_nom FROM oeuvre o INNER JOIN participer p ON p.fk_oeuvre_id = o.oeuvre_id INNER JOIN contributeur cb ON cb.contributeur_id = p.fk_contributeur_id INNER JOIN fonction f ON f.fonction_id = p.fk_fonction_id ORDER BY f.fonction_nom,cb.contributeur_nom ASC
Par exemple, si ma table "contributeur" contient les données suivantes :
contributeur_id | contributeur_nom | ...
1 | Pierre
2 | Pierre_pseudo 1
3 | Pierre_pseudo 2
4 | Jacques
5 | Paul
=> Ma table "signer" contiendrait les données suivantes (Jacques et Paul n'ayant pas de pseudo) :
fk_contributeur_id | fk_pseudonyme_id
1 | 2
1 | 3
Je voudrais compléter ma requête pour obtenir l'information complémentaire relative au(x) pseudo(s) éventuellement rattachés à un contributeur. Si je reprends l'exemple précédent, le résultat de la requête serait le suivant :
o.oeuvre_id | cb.contributeur_id | cb.contributeur_nom | ... | pseudo_nom | ... | pseudo_id
1 | 1 | Pierre | … | Pierre_pseudo 1 | … | 2
1 | 1 | Pierre | … | Pierre_pseudo 2 | … | 3
1 | 4 | Jacques | … | NULL | … | NULL
1 | 5 | Paul | … | NULL | … | NULL
Je ne veux donc pas restreindre le résultat aux seuls contributeurs ayant un (ou plusieurs) pseudo(s)
Est-il possible d’obtenir ce résultat ? Merci.
Partager