problème d'utilisation du JOIN et du WHERE
Bonjour,
J’ai un petit pb avec une requête… qui fonctionne presque !
Le but :
je cherche à avoir une liste d’assistantes avec le nom de leur responsable dans la même requête. L’assistante et le responsable ont la même entité (délégation).
Les tables :
- users (user_id ; user_nom ; user_prenom) : elle contient tous les utilisateurs (donc les assistantes + les responsables)
- entités (ent_id ; label) : elle contient toutes les entités (délégations)
- rel_users_entites (user_id ; ent_id ; flag_responsable ; flag_assistant) : elle fait la relation entre les 2 tables précédentes et indique si le user est responsable ou non, assistante ou non d’une entité donnée.
Le contexte :
je ne peux utiliser que MySQL 4.0.23 ce qui m’empêche de faire des requêtes imbriquées.
La requête :
J’obtiens quasiment ce que je désire… le seul problème est que je n’ai pas toutes les assistantes car celles qui n’ont pas encore de « responsable » pour une entité donnée, n’apparaissent pas. En effet, mon « where rue.ent_id = r.ent_id » me sélectionne que les lignes correspondantes, à droite et à gauche... et je n’arrive pas à inclure cette ligne dans un des JOIN précédents (ou un nouveau) sans lever une erreur ou avoir un résultat ne correspondant pas à ce que je désire…
SELECT u.user_nom as 'NOM ASSISTANTE',
u.user_prenom as 'PRENOM ASSISTANTE',
u.user_email as 'MAIL ASSISTANTE',
r.etage as ETAGE,
u.telephone as TELEPHONE,
us.user_nom as 'NOM DU RESPONSABLE',
us.user_prenom as 'PRENOM DU RESPONSABLE'
FROM entites e,
sites s,
rel_users_entites AS r
LEFT OUTER JOIN users AS u
ON (r.user_id = u.user_id
AND r.flag_assistant = 'O'),
rel_users_entites AS rue
LEFT OUTER JOIN users AS us
ON (rue.user_id = us.user_id
AND rue.flag_responsable = 'O')
WHERE rue.ent_id = r.ent_id
AND r.ent_id = e.ent_id
AND e.site_id = s.site_id
GROUP BY
u.user_nom, us.user_nom
Si vous avez le temps et réussi à comprendre mon problème, merci d’avance de votre aide !
Re: problème d'utilisation du JOIN et du WHERE
Au niveau de la jointure, ça donne ça:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| SELECT
assistante.user_nom AS 'NOM ASSISTANTE',
assistante.user_prenom as 'PRENOM ASSISTANTE',
assistante.user_email as 'MAIL ASSISTANTE',
assistante.telephone as 'TELEPHONE ASSISTANTE',
responsable.user_nom as 'NOM DU RESPONSABLE',
responsable.user_prenom as 'PRENOM DU RESPONSABLE'
FROM users AS assistante
INNER JOIN rel_users_entites AS rel_1 ON (assistante.user_id = rel_1.user_id)
LEFT OUTER JOIN rel_users_entites AS rel_2 ON (rel_1.ent_id=rel_2.ent_id)
INNER JOIN users AS responsable
ON (responsable.user_id = rel_2.user_id)
WHERE rel_1.flag_assistant = 'O'
AND rel_2.flag_responsable = 'O' |
Quelques trucs que je ne pige pas: le numéro de l'étage se trouve dans quel table? Qu'est-ce qu'on a dans la table site? A quoi te sert le GROUP BY?
Re: problème d'utilisation du JOIN et du WHERE
Je reprends en ajoutant les autres tables:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| SELECT
assistante.user_nom AS 'NOM ASSISTANTE',
assistante.user_prenom AS 'PRENOM ASSISTANTE',
assistante.user_email AS 'MAIL ASSISTANTE',
rel_1.etage AS 'ETAGE',
assistante.telephone AS 'TELEPHONE ASSISTANTE',
responsable.user_nom AS 'NOM DU RESPONSABLE',
responsable.user_prenom AS 'PRENOM DU RESPONSABLE'
FROM users AS assistante
INNER JOIN rel_users_entites AS rel_1
ON (assistante.user_id = rel_1.user_id)
LEFT OUTER JOIN rel_users_entites AS rel_2
ON (rel_1.ent_id=rel_2.ent_id)
INNER JOIN users AS responsable
ON (responsable.user_id = rel_2.user_id)
INNER JOIN entites
ON (entites.ent_id=rel_1.ent_id)
INNER JOIN sites
ON (entites.site_id=sites.site_id)
WHERE rel_1.flag_assistant = 'O'
AND rel_2.flag_responsable = 'O'
AND sites.nom_site= 'toto'
GROUP BY assistante.user_nom, responsable.user_nom |