Galère de LEFT JOIN
Résolu
heliconius
Messages postés
584
Statut
Membre
-
heliconius Messages postés 584 Statut Membre -
heliconius Messages postés 584 Statut Membre -
Bonsoir,
Souci avec un LEFT JOIN quand trois tables sont impliquées.
. Soit une propriété en ville composée de 3 corps de batiments (A, B, C).
. Chaque batiment contient 6 étages. A chaque étage, il y a 4 appartements (D, FD, FG, G pour Droite, Face Droit, Face Gauche, Gauche)
C'est arrivé qu'une même personne reste dans la propriété mais change de bâtiment.
Elle apparait donc plusieurs fois dans la relation Personne-Habiter-Appartement. => relation n-aire. Le schema et les tables sont donc les suivants (identifiants - clefs primaires, soulignés)
J'aimerais sortir la liste de TOUS les appartements, occupés ou non et s'ils sont occupés, le nom du locataire en regard. ex :
J'arrive très bien avec une relation une-aire (deux tables, pas de table Habiter et idapt migré dans la table Personnes) avec un left join et deux tables mais je m'emmêle les pinceaux avec trois tables.
Merci de votre aide...
Souci avec un LEFT JOIN quand trois tables sont impliquées.
. Soit une propriété en ville composée de 3 corps de batiments (A, B, C).
. Chaque batiment contient 6 étages. A chaque étage, il y a 4 appartements (D, FD, FG, G pour Droite, Face Droit, Face Gauche, Gauche)
C'est arrivé qu'une même personne reste dans la propriété mais change de bâtiment.
Elle apparait donc plusieurs fois dans la relation Personne-Habiter-Appartement. => relation n-aire. Le schema et les tables sont donc les suivants (identifiants - clefs primaires, soulignés)
Personne--1,n----Habiter----0,n--Appartement
Personnes(idpers, nom, prénom, etc...)
Habiter(idpers,idapt,debut,fin)
Appartements(idapt,batiment,etage,position,type)
Personnes : +---+--------+----------+-----+ | 1 | DUPONT | Marcel | ... | | 2 | DUVAL | Isabelle | ... | Habiter : +----+----+------------+------------+ | 2 | 9 | 1998-03-29 | 2007-31-08 | | 42 | 12 | 2015-07-28 | 0000-00-00 | Appartements : +----+---+---+----+--------+ | 9 | A | 3 | FG | F3 | | 10 | A | 3 | G | F5 | | .. | . | . | .. | ...... | | 25 | C | 6 | D | Studio |
J'aimerais sortir la liste de TOUS les appartements, occupés ou non et s'ils sont occupés, le nom du locataire en regard. ex :
mysql> SELECT .... +----+---+---+----+--------+--------+----------+ | 9 | A | 3 | FG | F3 | DUPONT | Marcel | | 10 | A | 3 | G | F5 | NULL | NULL | | 25 | C | 6 | D | Studio | DUVAL | Isabelle |
J'arrive très bien avec une relation une-aire (deux tables, pas de table Habiter et idapt migré dans la table Personnes) avec un left join et deux tables mais je m'emmêle les pinceaux avec trois tables.
Merci de votre aide...
Configuration: Dual boot: Windows XP Pro SP3 / Debian Linux
A voir également:
- Left right chanson été
- Texte de chanson gratuit pdf - Télécharger - Vie quotidienne
- Je cherche une chanson - Guide
- Mon compte facebook a été désactivé - Guide
- Mon compte instagram a été désactivé - Guide
- Comment mettre une chanson en sonnerie - Guide
merci pour ta réponse.
La solution initiale était celle-ci : Relation une-aire à cause des cardinalités Personnes (1,1) : Une personne ne participe qu'une fois et une seule à la relation Habiter (en effet, n'ayant pas le don d'ubiquité, elle ne loge que dans un appartement et un seul). (Souligné = ID, clef primaire ; Italique = clef étrangère)
La requete qui fonctionnait était :
Mais étant donné qu'un locataire peut pour des raisons de travaux quitter un appartement pour en occuper un autre dans la même propriété, un locataire peut donc participer 1 ou plusieurs fois (1,n) à la relation Habiter. d'où changement de modèle pour en arriver au modèle que j'ai posté en question. Et là, il y a maintenant trois tables puisque la relation n-aire (toutes les cmax à n) donnent lieu à la création de la table Habiter. Et là, je coince avec les LEFT JOIN avec trois tables. Je crois savoir (mais je n'en suis pas sûr qu'on peut faire un LEFT JOIN avec le résultat d'une requête (genre: Appartements LEFT JOIN avec le résultat d'une requête incluant Personnes et Habiter) Mais là je pense nager... D'où mon Help !
Ai-je été clair dans la définition du problème ?
PS: Pour DUPONT Marcel, tu as bien vu, c'etait une erreur de ma part. La table Habiter était :
pouvant être P (Particulier) ou S (Société). Voici ce que ça donne :
Je ne savais pas que l'on pouvait "enquiller" les LEFT JOIN les uns après les autres. Merci.
Je viendrai fermer le fil dans un jour ou deux, juste pour me laisser le temps d'une autre tentative (utiliser le résultat d'une requête entre deux tables, comme une table) dans le genre :
Il me semble avoir vu ça quelque part...
Si je trouve, je viens poster le résultat et je ferme. Si je ne trouve pas, je ferme aussi.
En tout cas, merci beaucoup.
PS: Non, ce n'est pas un travail scolaire mais un projet de site web d'information et de communication entre les résidents d'une même propriété sans vouloir concurrencer Nextdoor qui, comme la plupart des réseaux sociaux, collecte les informations ; mais justement les protège d'une collecte de données. On échange entre nous, sans cookies, sans traqueurs, etc...
Ou si l'on veut les locataires ayant quitté leur logement, ceux dont la date de fin est différente de "0000-00-00".
Merci pour cette précision.