Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

simplification de requete

7 réponses
Avatar
Orel
bonjour a tous !

j'expose simplement le probleme :
access me jette because : la requete est trop complexe

effectivement en regardant de plus pres hum hum ... ca crain un peu :
SELECT * FROM [parametrage]
WHERE (
[IDProduits] = 108 AND
[IDProduits] = 109 AND
[IDProduits] = 110 AND
[IDProduits] = 111 AND
[IDProduits] = 112 AND
[IDProduits] = 113 AND
[IDProduits] = 114 AND
[IDProduits] = 115 AND
[IDProduits] = 116 AND............pendant beaucoup d'octets encore ......)

sachant que ma chaine where est retourné par une autre de mes fonction
(choix ans une listbox) et que les IDPRODUITS ne se suivent pas forcément et
que l'on ne les prends pas tous a chaque fois (sinon j'aurai fais un
select* from table et basta ...)

merci pour vos renseignements / indices / pistes / réponses !!

orel

7 réponses

Avatar
Raymond
Bonjour.

un indice seulement :

Nombre maxi de AND dans une clause WHERE ou HAVING = 40
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Orel" <pub[nospam]@owel.fr.st> a écrit dans le message de
news:%
bonjour a tous !

j'expose simplement le probleme :
access me jette because : la requete est trop complexe

effectivement en regardant de plus pres hum hum ... ca crain un peu :
SELECT * FROM [parametrage]
WHERE (
[IDProduits] = 108 AND
[IDProduits] = 109 AND
[IDProduits] = 110 AND
[IDProduits] = 111 AND
[IDProduits] = 112 AND
[IDProduits] = 113 AND
[IDProduits] = 114 AND
[IDProduits] = 115 AND
[IDProduits] = 116 AND............pendant beaucoup d'octets encore
......)


sachant que ma chaine where est retourné par une autre de mes fonction
(choix ans une listbox) et que les IDPRODUITS ne se suivent pas forcément
et

que l'on ne les prends pas tous a chaque fois (sinon j'aurai fais un
select* from table et basta ...)

merci pour vos renseignements / indices / pistes / réponses !!

orel




Avatar
François
Bonjour,

Une des solution consisterait à créer une table temporaire
avec comme unique champ IDProduits
de la remplir avec les N° souhaitez via une liste multiple
ou autre
de la lier dans la requete avec la table parametrage

WHERE parametrage.IDProduits=tabletemp.IDProduits

Bonne journée

François



-----Message d'origine-----
bonjour a tous !

j'expose simplement le probleme :
access me jette because : la requete est trop complexe

effectivement en regardant de plus pres hum hum ... ca
crain un peu :

SELECT * FROM [parametrage]
WHERE (
[IDProduits] = 108 AND
[IDProduits] = 109 AND
[IDProduits] = 110 AND
[IDProduits] = 111 AND
[IDProduits] = 112 AND
[IDProduits] = 113 AND
[IDProduits] = 114 AND
[IDProduits] = 115 AND
[IDProduits] = 116 AND............pendant beaucoup
d'octets encore ......)


sachant que ma chaine where est retourné par une autre de
mes fonction

(choix ans une listbox) et que les IDPRODUITS ne se
suivent pas forcément et

que l'on ne les prends pas tous a chaque fois (sinon
j'aurai fais un

select* from table et basta ...)

merci pour vos renseignements / indices / pistes /
réponses !!


orel


.



Avatar
Rv
Salut,

Il y un truc qui m'échappe:
Je ne comprends pas comment un même champ peut avoir en même temps (i.e.
sur le même enregistrement) plusieurs valeurs différentes? Pour qu'un
enregistrement soit retourné par une telle requête il faudrait que dans cet
enregistrement IdProduit soit égal à 108 et à 109 et ... Un champ quantique?
:-)
Ce n'est pas plutôt du OR à la place du AND? Et dans ce cas un SELECT
... IN (108, 109, ...) conviendrait.

A+

Rv

"Orel" <pub[nospam]@owel.fr.st> a écrit dans le message de
news:%
bonjour a tous !

j'expose simplement le probleme :
access me jette because : la requete est trop complexe

effectivement en regardant de plus pres hum hum ... ca crain un peu :
SELECT * FROM [parametrage]
WHERE (
[IDProduits] = 108 AND
[IDProduits] = 109 AND
[IDProduits] = 110 AND
[IDProduits] = 111 AND
[IDProduits] = 112 AND
[IDProduits] = 113 AND
[IDProduits] = 114 AND
[IDProduits] = 115 AND
[IDProduits] = 116 AND............pendant beaucoup d'octets encore
......)


sachant que ma chaine where est retourné par une autre de mes fonction
(choix ans une listbox) et que les IDPRODUITS ne se suivent pas forcément
et

que l'on ne les prends pas tous a chaque fois (sinon j'aurai fais un
select* from table et basta ...)

merci pour vos renseignements / indices / pistes / réponses !!

orel




Avatar
Orel
non non .. c pas un champ de type quantique ;o)....

IDPRODUIT | VALEUR
106 | azerty
105 | aqsdcf
145 | poiuytreza
.....
....


je veux selectionner les champs 106 et 145

comment faire a vec le SELECT IN(...) ??


merci a vous


"Rv" a écrit dans le message news:
OBYRM$
Salut,

Il y un truc qui m'échappe:
Je ne comprends pas comment un même champ peut avoir en même temps
(i.e.

sur le même enregistrement) plusieurs valeurs différentes? Pour qu'un
enregistrement soit retourné par une telle requête il faudrait que dans
cet

enregistrement IdProduit soit égal à 108 et à 109 et ... Un champ
quantique?

:-)
Ce n'est pas plutôt du OR à la place du AND? Et dans ce cas un SELECT
... IN (108, 109, ...) conviendrait.

A+

Rv

"Orel" <pub[nospam]@owel.fr.st> a écrit dans le message de
news:%
bonjour a tous !

j'expose simplement le probleme :
access me jette because : la requete est trop complexe

effectivement en regardant de plus pres hum hum ... ca crain un peu :
SELECT * FROM [parametrage]
WHERE (
[IDProduits] = 108 AND
[IDProduits] = 109 AND
[IDProduits] = 110 AND
[IDProduits] = 111 AND
[IDProduits] = 112 AND
[IDProduits] = 113 AND
[IDProduits] = 114 AND
[IDProduits] = 115 AND
[IDProduits] = 116 AND............pendant beaucoup d'octets encore
......)


sachant que ma chaine where est retourné par une autre de mes fonction
(choix ans une listbox) et que les IDPRODUITS ne se suivent pas
forcément


et
que l'on ne les prends pas tous a chaque fois (sinon j'aurai fais un
select* from table et basta ...)

merci pour vos renseignements / indices / pistes / réponses !!

orel








Avatar
Rv
Dans ce cas la clause where doit être construite pour sortir comme résultat
:
WHERE IDPRODUIT IN (106,145)
A la place de
WHERE IDPRODUIT = 106 AND IDPRODUIT = 145

A+

Rv


"Orel" <pub[nospam]@owel.fr.st> a écrit dans le message de
news:
non non .. c pas un champ de type quantique ;o)....

IDPRODUIT | VALEUR
106 | azerty
105 | aqsdcf
145 | poiuytreza
.....
....


je veux selectionner les champs 106 et 145

comment faire a vec le SELECT IN(...) ??


merci a vous


"Rv" a écrit dans le message news:
OBYRM$
Salut,

Il y un truc qui m'échappe:
Je ne comprends pas comment un même champ peut avoir en même temps
(i.e.

sur le même enregistrement) plusieurs valeurs différentes? Pour qu'un
enregistrement soit retourné par une telle requête il faudrait que dans
cet

enregistrement IdProduit soit égal à 108 et à 109 et ... Un champ
quantique?

:-)
Ce n'est pas plutôt du OR à la place du AND? Et dans ce cas un
SELECT


... IN (108, 109, ...) conviendrait.

A+

Rv

"Orel" <pub[nospam]@owel.fr.st> a écrit dans le message de
news:%
bonjour a tous !

j'expose simplement le probleme :
access me jette because : la requete est trop complexe

effectivement en regardant de plus pres hum hum ... ca crain un peu :
SELECT * FROM [parametrage]
WHERE (
[IDProduits] = 108 AND
[IDProduits] = 109 AND
[IDProduits] = 110 AND
[IDProduits] = 111 AND
[IDProduits] = 112 AND
[IDProduits] = 113 AND
[IDProduits] = 114 AND
[IDProduits] = 115 AND
[IDProduits] = 116 AND............pendant beaucoup d'octets encore
......)


sachant que ma chaine where est retourné par une autre de mes fonction
(choix ans une listbox) et que les IDPRODUITS ne se suivent pas
forcément


et
que l'on ne les prends pas tous a chaque fois (sinon j'aurai fais un
select* from table et basta ...)

merci pour vos renseignements / indices / pistes / réponses !!

orel












Avatar
Evaro
Bonjour Orel,

"Orel" <pub[nospam]@owel.fr.st> a écrit dans le message de news:

non non .. c pas un champ de type quantique ;o)....

IDPRODUIT | VALEUR
106 | azerty
105 | aqsdcf
145 | poiuytreza
.....
....


je veux selectionner les champs 106 et 145



Peut-être en concaténant tous tes champs avec un séparateur ("106;145;")
dans une chaîne et en utilisant la fonction DansChaîne
Selectionné : DansChaîne(MaChaîneDeChoix;[IdProduit]) > 0) ou qqchose
comme ça, j'ai pas testé.

--
@ +
Etienne
Charte du forum: http://users.skynet.be/mpfa/charte.htm

Avatar
Michel Walsh
Salut,


106 ne peut pas en même temps être égal à 106 et a 145.

Tu désires l'employé qui a les qualifications 106 et 145 ? Si
oui...

Mettre les qualifications désirées dans une table,
CompétencesCherchées, un champ Compétende, un enregistrement par compétence
désirée.

Tu as également une table EmployésCompétences, du genre

Empoyé, Compétence
Jean 104
Jean 105
Jean 106
Marie 145
Pierre 145
Marie 106
...




Eh bien alors:


SELECT Employé
FROM EmployésCompétences INNER JOIN CompétencesCherchées
ON EmployésCompétences.Compétence CompétencesCherchées.Compétence
GROUP BY Employé
HAVING COUNT(*) = (SELECT COUNT(*) FROM CompétencesCherchées)



te fournira Marie. Le join interne agit ici comme une intersection. Si tu
examines le résultat du simple SELECT en arrêtant le code juste avant le
GROUP BY,


SELECT Employé, EmployésCompétences.Compétence
FROM EmployésCompétences INNER JOIN CompétencesCherchées
ON EmployésCompétences.Compétence CompétencesCherchées.Compétence


tu verras que seules les compétences désirables demeurent.

Le regroupement avec décompte d'enregistrement nous donnera le nombre de
compétence recherché, par employé. Ici, Jean en a une, Pierre itou, et Marie
en a deux. Bien sûr, on en voulait deux (le count d'enregistrements dans
CompétencesCherchés), donc, seule Marie survit au HAVING.



Espérant être utile,
Vanderghast, Access MVP


"Orel" <pub[nospam]@owel.fr.st> wrote in message
news:
non non .. c pas un champ de type quantique ;o)....

IDPRODUIT | VALEUR
106 | azerty
105 | aqsdcf
145 | poiuytreza
.....
....


je veux selectionner les champs 106 et 145

comment faire a vec le SELECT IN(...) ??


merci a vous


"Rv" a écrit dans le message news:
OBYRM$
Salut,

Il y un truc qui m'échappe:
Je ne comprends pas comment un même champ peut avoir en même temps
(i.e.

sur le même enregistrement) plusieurs valeurs différentes? Pour qu'un
enregistrement soit retourné par une telle requête il faudrait que dans
cet

enregistrement IdProduit soit égal à 108 et à 109 et ... Un champ
quantique?

:-)
Ce n'est pas plutôt du OR à la place du AND? Et dans ce cas un
SELECT


... IN (108, 109, ...) conviendrait.

A+

Rv

"Orel" <pub[nospam]@owel.fr.st> a écrit dans le message de
news:%
bonjour a tous !

j'expose simplement le probleme :
access me jette because : la requete est trop complexe

effectivement en regardant de plus pres hum hum ... ca crain un peu :
SELECT * FROM [parametrage]
WHERE (
[IDProduits] = 108 AND
[IDProduits] = 109 AND
[IDProduits] = 110 AND
[IDProduits] = 111 AND
[IDProduits] = 112 AND
[IDProduits] = 113 AND
[IDProduits] = 114 AND
[IDProduits] = 115 AND
[IDProduits] = 116 AND............pendant beaucoup d'octets encore
......)


sachant que ma chaine where est retourné par une autre de mes fonction
(choix ans une listbox) et que les IDPRODUITS ne se suivent pas
forcément


et
que l'on ne les prends pas tous a chaque fois (sinon j'aurai fais un
select* from table et basta ...)

merci pour vos renseignements / indices / pistes / réponses !!

orel