simplifier 4 requêtes

10 réponses
Avatar
zzzz
Bonjour,

A mon fichier des effectifs des =E9coles de l'ann=E9e 2009 je dois ajouter
la colonne des effectifs de la table 2010.
Ma 1re requ=EAte :
SELECT Tab09.NUMEtab, Tab09.Niveau, Tab09.Eff2009, Tab10.Eff2010]
FROM Tab09 INNER JOIN Tab10 ON (Tab09.NUMEtab =3D Tab10.NUMEtab) AND
(Tab09.Niveau =3D Tab10.Niveau);

Mais comme des =E9coles ou des niveaux ont disparu en 2010 et que des
=E9coles ou des niveaux ont =E9t=E9 cr=E9=E9s en 2010, cette requ=EAte ne v=
a
garder que les =E9coles et niveaux communs aux 2 tables.
Ce que je fais : je cr=E9e une requ=EAte LEFT JOOIN et une RIGHT JOIN,
ensuite une requ=EAte UNION; soit 4 requ=EAtes en tout.

Est-il possible de faire tout =E7a en une seule requ=EAte (ou minimiser)
Merci d'avance
Eric

10 réponses

Avatar
Albéric
Bonjour zzzzzzzzzz

La structure de votre base est mal conçue.
Désolé.
Il ne peut pas y avoir de tables temporelles (Tab08, TAb09, ...10, ...11...)
dans une SGBDR. C'est une construction à la "Excel"

Cdt, Albéric

"zzzz" a écrit dans le message de news:

Bonjour,

A mon fichier des effectifs des écoles de l'année 2009 je dois ajouter
la colonne des effectifs de la table 2010.
Ma 1re requête :
SELECT Tab09.NUMEtab, Tab09.Niveau, Tab09.Eff2009, Tab10.Eff2010]
FROM Tab09 INNER JOIN Tab10 ON (Tab09.NUMEtab = Tab10.NUMEtab) AND
(Tab09.Niveau = Tab10.Niveau);

Mais comme des écoles ou des niveaux ont disparu en 2010 et que des
écoles ou des niveaux ont été créés en 2010, cette requête ne va
garder que les écoles et niveaux communs aux 2 tables.
Ce que je fais : je crée une requête LEFT JOOIN et une RIGHT JOIN,
ensuite une requête UNION; soit 4 requêtes en tout.

Est-il possible de faire tout ça en une seule requête (ou minimiser)
Merci d'avance
Eric
Avatar
Gloops
Bonjour,

Je suis certes de l'avis d'Albéric.
Je me dis que peut-être il n'a pas été tendre en ne proposant aucun e
piste pour chercher à remédier au problème dénoncé. En revanche , il faut
certes reconnaître que ça lui permet une qualité : la concision.



Il s'agit d'appliquer une méthode d'analyse, qui est un outil précieu x
pour se poser les bonnes questions.

Une fois que la première approche a fait retenir les notions d'étudia nt,
d'année et de filière, parmi les bonnes questions on trouve:
- un étudiant peut-il fréquenter plusieurs filières ?
- un étudiant peut-il avoir plusieurs années d'entrée à l'école ?
- connaissant son année d'entrée, connaît-on son année de sortie ? En
a-t-on besoin ?

Selon les réponses on peut être amené à maintenir les objets qu'o n avait
imaginés au départ, à les dissocier selon un critère, à les reg rouper en
précisant une propriété ...

Parmi les méthodes d'analyse couramment pratiquées on peut citer Meri se
et UML. Pour ma part j'ai davantage de pratique de Merise. Si j'en crois
les réactions des utilisateurs une fois mes bases fournies, ce n'est pa s
tout faux.

Alors j'ai fait une rapide recherche, et les quelques minutes que j'y ai
consacrées m'ont mené là :
http://www.commentcamarche.net/contents/merise/concintro.php3

La première page me paraissait lisible, il me semblait que c'était un
critère déterminant.

Ensuite, pour vraiment valider cette sélection, peut-être faudrait-il y
passer plus de temps.
Peut-être te laisser me dire ce que tu en penses peut s'avérer rentab le
comme emploi du temps.

Ensuite, il n'est pas impossible qu'il faille revenir voir où tu en es
de ton cas particulier. Et qu'il faille aussi tenir compte de combien
d'autres projets tu es susceptible d'avoir à prendre en charge, pour
soit t'accompagner dans l'assimilation d'une méthode, soit t'aider à
structurer l'exemple qui t'occupe aujourd'hui.

ça ne prend pas le même temps, et ça ne permet pas les mêmes chos es.
Je ne suis d'ailleurs pas certain d'avoir le temps d'aller au bout dans
les deux cas, mais il y aura bien quelqu'un pour prendre la suite.

___________________________________
zzzz a écrit, le 22/06/2011 17:12 :
Bonjour,

A mon fichier des effectifs des écoles de l'année 2009 je dois ajou ter
la colonne des effectifs de la table 2010.
Ma 1re requête :
SELECT Tab09.NUMEtab, Tab09.Niveau, Tab09.Eff2009, Tab10.Eff2010]
FROM Tab09 INNER JOIN Tab10 ON (Tab09.NUMEtab = Tab10.NUMEtab) AND
(Tab09.Niveau = Tab10.Niveau);

Mais comme des écoles ou des niveaux ont disparu en 2010 et que des
écoles ou des niveaux ont été créés en 2010, cette requête ne va
garder que les écoles et niveaux communs aux 2 tables.
Ce que je fais : je crée une requête LEFT JOOIN et une RIGHT JOIN,
ensuite une requête UNION; soit 4 requêtes en tout.

Est-il possible de faire tout ça en une seule requête (ou minimiser )
Merci d'avance
Eric
Avatar
zzzz
On 23 juin, 01:11, Gloops wrote:
Bonjour,

Je suis certes de l'avis d'Albéric.
Je me dis que peut-être il n'a pas été tendre en ne proposant aucun e
piste pour chercher à remédier au problème dénoncé. En revanche , il faut
certes reconnaître que ça lui permet une qualité : la concision.

Il s'agit d'appliquer une méthode d'analyse, qui est un outil précieu x
pour se poser les bonnes questions.

Une fois que la première approche a fait retenir les notions d'étudia nt,
d'année et de filière, parmi les bonnes questions on trouve:
- un étudiant peut-il fréquenter plusieurs filières ?
- un étudiant peut-il avoir plusieurs années d'entrée à l'école ?
- connaissant son année d'entrée, connaît-on son année de sortie ? En
a-t-on besoin ?

Selon les réponses on peut être amené à maintenir les objets qu'o n avait
imaginés au départ, à les dissocier selon un critère, à les reg rouper en
précisant une propriété ...

Parmi les méthodes d'analyse couramment pratiquées on peut citer Meri se
et UML. Pour ma part j'ai davantage de pratique de Merise. Si j'en crois
les réactions des utilisateurs une fois mes bases fournies, ce n'est pa s
tout faux.

Alors j'ai fait une rapide recherche, et les quelques minutes que j'y ai
consacrées m'ont mené là :http://www.commentcamarche.net/contents/m erise/concintro.php3

La première page me paraissait lisible, il me semblait que c'était un
critère déterminant.

Ensuite, pour vraiment valider cette sélection, peut-être faudrait-il y
passer plus de temps.
Peut-être te laisser me dire ce que tu en penses peut s'avérer rentab le
comme emploi du temps.

Ensuite, il n'est pas impossible qu'il faille revenir voir où tu en es
de ton cas particulier. Et qu'il faille aussi tenir compte de combien
d'autres projets tu es susceptible d'avoir à prendre en charge, pour
soit t'accompagner dans l'assimilation d'une méthode, soit t'aider à
structurer l'exemple qui t'occupe aujourd'hui.

ça ne prend pas le même temps, et ça ne permet pas les mêmes chos es.
Je ne suis d'ailleurs pas certain d'avoir le temps d'aller au bout dans
les deux cas, mais il y aura bien quelqu'un pour prendre la suite.

___________________________________


Ma question était purement SQL. Je ne peux pas faire ça sous Excel,
car en réalité, en amont et en aval des 4 requêtes dont j'ai parlé,
interviennent d'autre requêtes (et d'autres tables). Mon but était
d'alléger la durée de l'exécution de la requête finale.
Avatar
3stone
Salut,

"zzzz" a écrit dans le message de news:

Bonjour,

A mon fichier des effectifs des écoles de l'année 2009 je dois ajouter
la colonne des effectifs de la table 2010.
Ma 1re requête :
SELECT Tab09.NUMEtab, Tab09.Niveau, Tab09.Eff2009, Tab10.Eff2010]
FROM Tab09 INNER JOIN Tab10 ON (Tab09.NUMEtab = Tab10.NUMEtab) AND
(Tab09.Niveau = Tab10.Niveau);

Mais comme des écoles ou des niveaux ont disparu en 2010 et que des
écoles ou des niveaux ont été créés en 2010, cette requête ne va
garder que les écoles et niveaux communs aux 2 tables.
Ce que je fais : je crée une requête LEFT JOOIN et une RIGHT JOIN,
ensuite une requête UNION; soit 4 requêtes en tout.

Est-il possible de faire tout ça en une seule requête (ou minimiser)
Merci d'avance
Eric
----------------

Essaie...

Select c1, c2, cx from(select c1, c2, c3 ... from ... )
union
select c1, c2, cx from(select c1, c2, c3 ... from ... )

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Gloops
zzzz a écrit, le 24/06/2011 12:12 :
Ma question était purement SQL. Je ne peux pas faire ça sous Excel,
car en réalité, en amont et en aval des 4 requêtes dont j'ai parl é,
interviennent d'autre requêtes (et d'autres tables). Mon but était
d'alléger la durée de l'exécution de la requête finale.



Ah, si maintenant tu veux t'embarquer avec Excel, là je décroche ...
Avatar
zzzz
On 25 juin, 14:24, "3stone" wrote:
Salut,

"zzzz" a écrit dans le message de news:

Bonjour,

A mon fichier des effectifs des écoles de l'année 2009 je dois ajoute r
la colonne des effectifs de la table 2010.
Ma 1re requête :
SELECT Tab09.NUMEtab, Tab09.Niveau, Tab09.Eff2009, Tab10.Eff2010]
FROM Tab09 INNER JOIN Tab10 ON (Tab09.NUMEtab = Tab10.NUMEtab) AND
(Tab09.Niveau = Tab10.Niveau);

Mais comme des écoles ou des niveaux ont disparu en 2010 et que des
écoles ou des niveaux ont été créés en 2010, cette requête ne va
garder que les écoles et niveaux communs aux 2 tables.
Ce que je fais : je crée une requête LEFT JOOIN et une RIGHT JOIN,
ensuite une requête UNION; soit 4 requêtes en tout.

Est-il possible de faire tout ça en une seule requête (ou minimiser)
Merci d'avance
Eric
----------------

Essaie...

Select c1, c2, cx from(select c1, c2, c3 ... from ... )
union
select c1, c2, cx from(select c1, c2, c3 ... from ... )

--
A+
Pierre (3stone) Access MVP
Perso:http://www.3stone.be/
MPFA:http://www.mpfa.info/ (infos générales)



J'étais absent du bureau hier.
Je ne comprends pas... L'union se fait entre 2 requêtes qui sont
pareils ?...ou entre les tables 2009 et 2010... Je ne vois pas où tu
veux en venir...
Avatar
zzzz
On 25 juin, 14:24, "3stone" wrote:
Salut,

Essaie...

Select c1, c2, cx from(select c1, c2, c3 ... from ... )
union
select c1, c2, cx from(select c1, c2, c3 ... from ... )

--
A+
Pierre (3stone) Access MVP
Perso:http://www.3stone.be/
MPFA:http://www.mpfa.info/ (infos générales)



Bonjour,
J'ai répondu hier et je ne comprends pas pourquoi ça n'a pas été
publié.
Je n'ai pas compris pourquoi tu fais une union entre la même table ?
ou alors entre les tables 2009 et 2010 ? Mais là non plus je ne
comprends pas ...
Avatar
Gloops
zzzz a écrit, le 29/06/2011 15:30 :
On 25 juin, 14:24, "3stone" wrote:
Salut,

Essaie...

Select c1, c2, cx from(select c1, c2, c3 ... from ... )
union
select c1, c2, cx from(select c1, c2, c3 ... from ... )

--
A+
Pierre (3stone) Access MVP
Perso:http://www.3stone.be/
MPFA:http://www.mpfa.info/ (infos générales)



Bonjour,
J'ai répondu hier et je ne comprends pas pourquoi ça n'a pas été
publié.
Je n'ai pas compris pourquoi tu fais une union entre la même table ?
ou alors entre les tables 2009 et 2010 ? Mais là non plus je ne
comprends pas ...




Bonjour,

Pour info ... Pour ma part, sur aioe.org, j'ai vu ta réponse hier soir.=
Avatar
3stone
Salut,

"zzzz"
Essaie...

Select c1, c2, cx from(select c1, c2, c3 ... from ... )
union
select c1, c2, cx from(select c1, c2, c3 ... from ... )

--
A+
Pierre (3stone) Access MVP
Perso:http://www.3stone.be/
MPFA:http://www.mpfa.info/ (infos générales)



Bonjour,
J'ai répondu hier et je ne comprends pas pourquoi ça n'a pas été
publié.
Je n'ai pas compris pourquoi tu fais une union entre la même table ?
ou alors entre les tables 2009 et 2010 ? Mais là non plus je ne
comprends pas ...
---------------------------

Si les deux messages sont passé...


Mais, la question originale était :
"Est-il possible de faire tout ça en une seule requête (ou minimiser)"

La réponse était d'utiliser une/des sous-requêtes.
Sinon, puisque ta solution semble fonctionner, laisse ainsi ;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
zzzz
On 30 juin, 01:05, "3stone" wrote:
Salut,

"zzzz"

> Essaie...

> Select c1, c2, cx from(select c1, c2, c3 ... from ... )
> union
> select c1, c2, cx from(select c1, c2, c3 ... from ... )

> --
> A+
> Pierre (3stone) Access MVP
> Perso:http://www.3stone.be/
> MPFA:http://www.mpfa.info/(infos générales)

Bonjour,
J'ai répondu hier et je ne comprends pas pourquoi ça n'a pas été
publié.
Je n'ai pas compris pourquoi tu fais une union entre la même table ?
ou alors entre les tables 2009 et 2010 ? Mais là non plus je ne
comprends pas  ...
---------------------------

Si les deux messages sont passé...

Mais, la question originale était :
"Est-il possible de faire tout ça en une seule requête (ou minimiser) "

La réponse était d'utiliser une/des sous-requêtes.
Sinon, puisque ta solution semble fonctionner, laisse ainsi ;-)

--
A+
Pierre (3stone) Access MVP
Perso:http://www.3stone.be/
MPFA:http://www.mpfa.info/ (infos générales)



OK ...