Problème jointure externe

Messages postés
19
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
4 juin 2012
-
Messages postés
19
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
4 juin 2012
-
Bonjour à tous,

J'aurais besoin de votre aide pour une requete sur access

voici ma requete :

SELECT * from repond
where numEval=numE

right join questions on questions.numéro=repond.numQuest;

Je cherche à faire une requete de jointure en combinant la table de resultat d'une requete et d'une autre table. Mais je ne trouve pas la bonne solution.

Quelqu'un a-t-il une idée?

Merci d'avance,
<!-- END TEMPLATE: newpost_preview -->

20 réponses

Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Salut, que veux tu faire exactement ?
Tu veux tous les enregs de la table questions pour un enreg de la table repond ?

SELECT * from repond
right join questions on questions.numéro=repond.numQuest where numEval=numE;

Ou l"inverse ?

SELECT * from repond
left join questions on questions.numéro=repond.numQuest where numEval=numE;

Et numE, c"est quoi ? une variable de ton prog ?
Messages postés
19
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
4 juin 2012

Bonjour,

NumE est un paramètre dans mon prog j'entrerais une valuer.

Ce que je veux faire: c'est d'abord selectionné dans la table REPOND les enregistrements dont la le numéro d'eval est égal à numE, et faire ensuite une jointure de ce résultat avec tous les enregistrements de la table question.
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Alors, il faut que tu construises ta requête en sortant ta variable de la requête :

Requete = "SELECT * from repond right join questions on questions.numéro=repond.numQuest where numEval=" & numE
Messages postés
19
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
4 juin 2012

cette solution ne correspond pas à ce que je cherche j'ai besoin absolument de faire la selection avant la jointure pour avoir au final tous les enregistrements de la table questions .Si je fais la selection par le numeval apres la jointure je n'aurais que les lignes correspondantes au numéro.
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonsoir,


tu n' as pas besoin absolument de faire la selection avant la jointure
pour avoir au final tous les enregistrements de la table questions
l' important dans ce genre de requête est de ne pas uitliser * (ALL)
mais de désigner les champs et les tables dont ils font partie.


voici ma proposition:


"SELECT questions.numero, repond.numQuest, repond.numEval
FROM questions LEFT JOIN repond ON questions.numero = repond.numQuest
WHERE (([repond]![numEval]=" & numE & "));"


cette requête inclu tous les enregistrements de la table questions
et seulement ceux de la table repond pour lesquels les champs
joints sont égaux.


et tu  n'aurais pas que les lignes correspondantes au numéro.

ps: verifies si tu n' auras pas de problème avec les valeurs nulles

chaibat
Messages postés
19
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
4 juin 2012

ta requete fonctionne mais ne me donne pas le résultat que je veux, j'ai besoin d'avoir obligatoirement tous les champs de la table questions et seuls les champs de la table répond répondant au critère soient joints à la table questions.
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
voir mon commentaire sur le type de la jointure
^^cette requête inclu tous les enregistrements de la table questions
et seulement ceux de la table repond pour lesquels les champs
joints sont égaux.
en prenant en compte le critère
[repond]![numEval]=" & numE & ";"

ce qui correspond à ce que tu précises dans
^^j'ai besoin d'avoir obligatoirement tous les champs de la table questions et seuls les champs de la table répond répondant au critère soient joints à la table questions.

resultat:
s' il ne trouve pas d' équivalence il t' afficheras
numero    Null     Null

est-ce que je me trompe ?
donnes nous quelques lignes du resultat,
et indiques nous ou est l' erreur
Messages postés
19
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
4 juin 2012

Désolé oui on s'est mal compris
je n'ai aucune ligne en résultat et il ne me demande pas de lui préciser un numEval apparement il ne le reconnait pas en paramatre de la requete

merci beaucoup pour ton aide en tout cas
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
no souci !
de toute façon , si numE est une variable, elle doit être
renseignée avant de lancer ta requête.
fais un inputbox ou testes avec une valeur quelconque.
(valeur qui existe déjà dans ta table)

a+
Messages postés
19
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
4 juin 2012

même en mettant une valeur à la place de numEval je n'ai aucun résultat
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bizard, Bizard !
vraiment je ne vois pas ou ça bloque
je vais faire des tests plutard et je te tiendrais au courant
pour l' instant, je sors pour un moment
Messages postés
19
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
4 juin 2012

ok merci
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
voilà, j' ai fais un test à la sauvette avant de sortir


Table questions      Table repond
     numero               numQuest         numEval
         1                         1                      4       
         2                         3                      2
         3                         6                      2
         4
  
j' ai testé avec numEval=2


il m' affiche
 3            3           2


en fait il ne t' affiche que les ligne ou numero=numQuest
et c' est ce que tu ne veux pas je crois
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Essaie cette syntaxe :

requete = "SELECT * FROM questions WHERE numero IN (SELECT numQuest FROM repond WHERE numEval=" & numE & ");"

J'ai testé avec ça :

Table repond



numQuest

,

numEval

,

----

1

,

2

,

----

1

,

3

,

----

2

,

2

,

----

3

,

2

Table questions
numero

, titi

, ----
1

, a

, ----
2

, b

, ----
3

, c

, ----
4

, d

Résultat (titi) pour numE = 2
a,b,c
Résultat (titi) pour numE = 3
a

Ca te va comme ça ? Ou je n'ai rien compris ?
Messages postés
19
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
4 juin 2012

Selon ton exemple, petite précision supplémentaire dans la table répond j'ai un champ NumRep
par exemple avec la table Questions :
Numéro<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>, Intitulé, ----
1, Test, ----
2, Essai, ----
3, Test2, ----
4, Essai3

et la table Repond :

NumQuest, NumRep, NumEval, ----
1, 2, 2, ----
3, 1, 2, ----
1, 5, 10, ----
2, 4, 10, ----
3, 5, 15

Je voudrais avoir en résultat en ayant comme numEval 2 :

Questions.Numéro, Questions.Intitulé, Repond.NumRep, ----
1, Test, 2, ----
2, Essai,  , ----
3, Test2, 1, ----
4, Essai3,  
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Ca devient compliqué mais pas impossible, voilà la requete qui donne le résultat que tu souhaites :
requete "SELECT numero, intitule, numrep FROM questions, repond WHERE numero numquest AND numeval = '" & numE & "' UNION SELECT numero, intitule, '' as numrep FROM questions WHERE numero NOT IN (SELECT numquest FROM questions, repond WHERE numero = numquest AND numeval = '" & numE & "') ORDER BY numero;"

J'ai zappé les accents et majuscules pour les noms de champ et de table. Je te laisse le soin de les modifier en fonction de tes vrais noms.
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Remarque, sans le " ORDER BY numero" ça fonctionne aussi mais c'est peut-être un hasard.
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonsoir Dolphin Boy et fab
effectivement , ça devient compliqué
alors qu' il suffit tout simplement de faire


"SELECT questions.numero, repond.numQuest, repond.numEval
FROM questions LEFT JOIN repond ON questions.numero = repond.numQuest
WHERE ((([repond]![numEval])=" & numE & " Or ([repond]![numEval]) Is Null));


en ajoutant Or ([repond]![numEval]) Is Null)), le critère n' est plus exclusif.


en reprenant l' exemple précédent j' ai comme résultat:


numero numQuest numEval
2  
3               3            2
4  


je ne sais pas si c' est encore insuffisant car il manque une ligne
(numero =1)
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
remarques, si le code de Dolphin marche,
il vaut mieux l' adopter et tant pis si c' est compliqué
Messages postés
19
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
4 juin 2012

Bonjour,

Désolée de répondre après autant de temps mais j'ai du abandonné mon projet quelques temps. Je voulais dire que la solution fonctionnait très bien j'ai eu le temps de la tester. Voilà merci beaucoup à vous deux pour votre aide, je n'y serais pas arrivée toute seule.

A bientôt,