PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → requete avec jointure
requete avec jointure
Débuté par richard.clerc, 14 déc. 2004 17:48 - 6 réponses
Posté le 14 décembre 2004 - 17:48
j'ai 3 tables : Activites , ChoixActivite et Journal
avec ces descriptions :
ChoixActivité : LibelleActivite , AgeMini ,AgeMaxi , ...
Activite : LibelleActivite , DateActivite , ...
Journal : Jour , AgeDuJour ,...

Le journal regroupe les jours d'inscriptions (l'age y est calculer à
l'inscription pour des raisons pratiques); Les activites sont crées dans un
planning , c'est en fait l'affectation d'un Element de ChoixActivite à un
jour.

Je veux récuperer la liste des activités accessibles à la personne (AgeMini
< AgeDujour < AgeMaxi ) pour les jours d'inscriptions.

j'ai essayé ça , mais il ne tient pas compte de la restrictions d'âge ...

SELECT
DISTINCT ACTIVITES.IDActivités
FROM
CHOIXACTIVITE JOIN ACTIVITES ON
ACTIVITES.LibelleActivite=CHOIXACTIVITE.LibelleActivite ,
JOURNAL JOIN ACTIVITES ON
ACTIVITES.DATEACTIVITE=JOURNAL.JOUR
WHERE
JOURNAL.IDPersonneS AND
ACTIVITES.NOMCentre='CentreTest'AND
( JOURNAL.ageDuJour > ChoixActivité.ageMinimumActivité ) AND
( JOURNAL.ageDuJour < ChoixActivité.ageMaximumActivité )


merci .
Posté le 14 décembre 2004 - 18:39
essai avec des LEFT JOIN plutot que des JOIN

"Richard" <richard.clerc@oreka.com> a écrit dans le message de
news:41bf0229@news.pcsoft.fr...

j'ai 3 tables : Activites , ChoixActivite et Journal
avec ces descriptions :
ChoixActivité : LibelleActivite , AgeMini ,AgeMaxi , ...
Activite : LibelleActivite , DateActivite , ...
Journal : Jour , AgeDuJour ,...

Le journal regroupe les jours d'inscriptions (l'age y est calculer à
l'inscription pour des raisons pratiques); Les activites sont crées dans

un
planning , c'est en fait l'affectation d'un Element de ChoixActivite à un
jour.

Je veux récuperer la liste des activités accessibles à la personne

(AgeMini
< AgeDujour < AgeMaxi ) pour les jours d'inscriptions.

j'ai essayé ça , mais il ne tient pas compte de la restrictions d'âge ...

SELECT
DISTINCT ACTIVITES.IDActivités
FROM
CHOIXACTIVITE JOIN ACTIVITES ON
ACTIVITES.LibelleActivite=CHOIXACTIVITE.LibelleActivite ,
JOURNAL JOIN ACTIVITES ON
ACTIVITES.DATEACTIVITE=JOURNAL.JOUR
WHERE
JOURNAL.IDPersonneS AND
ACTIVITES.NOMCentre='CentreTest'AND
( JOURNAL.ageDuJour > ChoixActivité.ageMinimumActivité )

AND
( JOURNAL.ageDuJour < ChoixActivité.ageMaximumActivité )


merci .

Posté le 14 décembre 2004 - 19:18
Pourquoi passer par des joint ? Une jointure directe fonctionne aussi:

select distinct activites.idactivites from choiactivite,activites,journal where activites.dateactivite = journal.jour and ACTIVITES.LibelleActivite=CHOIXACTIVITE.LibelleActivite and ACTIVITES.NOMCentre='CentreTest' and JOURNAL.IDPersonneS and ( JOURNAL.ageDuJour > ChoixActivité.ageMinimumActivité ) AND
> ( JOURNAL.ageDuJour < ChoixActivité.ageMaximumActivité )

J'ai juste deux remarques : la jointure sur le libelle ne me semble pas top ( une jointure porte plutôt sur une clé ), et j'éciterai à ta place d'utiliser des accents dans les nom des champs.

Frédéric.
Posté le 14 décembre 2004 - 19:18
Pourquoi passer par des joint ? Une jointure directe fonctionne aussi:

select distinct activites.idactivites from choixactivite,activites,journal where activites.dateactivite = journal.jour and ACTIVITES.LibelleActivite=CHOIXACTIVITE.LibelleActivite and ACTIVITES.NOMCentre='CentreTest' and JOURNAL.IDPersonneS and ( JOURNAL.ageDuJour > ChoixActivité.ageMinimumActivité ) AND
> ( JOURNAL.ageDuJour < ChoixActivité.ageMaximumActivité )

J'ai juste deux remarques : la jointure sur le libelle ne me semble pas top ( une jointure porte plutôt sur une clé ), et j'éviterai à ta place d'utiliser des accents dans les noms des champs.

Frédéric.
Posté le 15 décembre 2004 - 16:23
mon problème certainement lié à ceci :
SELECT
DISTINCT IDACTIVITES , IDJOURNAL ,AGEDUJOUR
FROM
JOURNAL JOIN ACTIVITES ON
JOURNAL.JOUR¬TIVITES.DATEACTIVITE ,
CHOIXACTIVITE
WHERE
JOURNAL.IDPERSONNES AND
JOURNAL.NOMCENTRE='CENTRE DE VACANCES2003/2004Hiver' and
JOURNAL.AGEDUJOUR > AGEMINIMUMACTIVITE

me renvoit 8 enregistrements , et si je veut afficher l'age mini dans les
résultats
SELECT
DISTINCT IDACTIVITES , IDJOURNAL
,AGEDUJOUR,AGEMINIMUMACTIVITE
FROM
JOURNAL JOIN ACTIVITES ON
JOURNAL.JOUR¬TIVITES.DATEACTIVITE ,
CHOIXACTIVITE
WHERE
JOURNAL.IDPERSONNES AND
JOURNAL.NOMCENTRE='CENTRE DE VACANCES2003/2004Hiver' and
JOURNAL.AGEDUJOUR > AGEMINIMUMACTIVITE

je me retrouve alors avec 16 résultats ..... POURQUOI ???




"Frédéric DEMILLY" <f.demilly@pacificpeche.fr> a écrit dans le message de
news: 41bf1663@news.pcsoft.fr...

Pourquoi passer par des joint ? Une jointure directe fonctionne aussi:

select distinct activites.idactivites from choixactivite,activites,journal

where activites.dateactivite = journal.jour and
ACTIVITES.LibelleActivite=CHOIXACTIVITE.LibelleActivite and
ACTIVITES.NOMCentre='CentreTest' and JOURNAL.IDPersonneS and (
JOURNAL.ageDuJour > ChoixActivité.ageMinimumActivité ) AND
( JOURNAL.ageDuJour < ChoixActivité.ageMaximumActivité )

J'ai juste deux remarques : la jointure sur le libelle ne me semble pas

top ( une jointure porte plutôt sur une clé ), et j'éviterai à ta place
d'utiliser des accents dans les noms des champs.

Frédéric.
Posté le 15 décembre 2004 - 17:04
C'est tout simple : la première requête renvoie 3 champs, et la deuxième 4. Donc grâce au ( ou à cause du ) DISTINCT, la première regroupe les lignes du résultat qui ont le même IdActivite, le même IdJournal et le même Agedujour, même s'il ont des ageminimumactivite différents. Alors que la deuxième les distingue.

Frédéric.
Posté le 20 décembre 2004 - 09:53
comment faire alors ??

"Frédéric DEMILLY" <f.demilly@pacificpeche.fr> a écrit dans le message de
news: 41c04868@news.pcsoft.fr...

C'est tout simple : la première requête renvoie 3 champs, et la deuxième

4. Donc grâce au ( ou à cause du ) DISTINCT, la première regroupe les lignes
du résultat qui ont le même IdActivite, le même IdJournal et le même
Agedujour, même s'il ont des ageminimumactivite différents. Alors que la
deuxième les distingue.

Frédéric.