PROBLEME SUR REQUETE ET SOUS REQUETE

SR2 Messages postés 46 Date d'inscription samedi 17 juillet 2004 Statut Membre Dernière intervention 25 juillet 2006 - 6 févr. 2006 à 19:23
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 7 févr. 2006 à 23:48
voici mon problème
je souhaiterai réaliser la meme opération qu'avec cette requete mais en utilisant des jointures INNER JOIN
pour eviter toutes ces sous requetes
c'est a dire pouvoir sortir le nom et le prenom pour un agent en une seule sous requete ou jointure sans etre obligé d'effectuer
deux sous requetes
merci à tous pour votre aide
MA_REQUETE = _
"SELECT *, " + _
"(SELECT PRENOM FROM BASE_AGENT WHERE (BASE_AGENT.N_AGENT=BASE_MOUVEMENTS.N_AGENT_ORIGINE_MOUVEMENT)) AS PRENOM, " + _
"(SELECT NOM FROM BASE_AGENT WHERE (BASE_AGENT.N_AGENT=BASE_MOUVEMENTS.N_AGENT_ORIGINE_MOUVEMENT)) AS NOM, " + _
"(SELECT PRENOM FROM BASE_AGENT WHERE (BASE_AGENT.N_AGENT=BASE_MOUVEMENTS.N_AGENT_RESPONSABLE_MOUVEMENT)) AS PRENOM2, " + _
"(SELECT NOM FROM BASE_AGENT WHERE (BASE_AGENT.N_AGENT=BASE_MOUVEMENTS.N_AGENT_RESPONSABLE_MOUVEMENT))AS NOM2" + _
" FROM BASE_MOUVEMENTS " + _
" WHERE (N°_INDEX_PIECE=" + N_PIECE + ")"

9 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
6 févr. 2006 à 22:39
Salut

MA_REQUETE = _
SELECT BASE_MOUVEMENTS.*, BASE_AGENT.PRENOM, BASE_AGENT.NOM, BASE_AGENT.PRENOM as PRENOM2, BASE_AGENT2.NOM As NOM2 ROM BASE_MOUVEMENTS
INNER JOIN BASE_AGENT
ON BASE_AGENT.N_AGENT=BASE_MOUVEMENTS.N_AGENT_ORIGINE_MOUVEMENT
INNER JOIN BASE_AGENT2
ON BASE_AGENT2.N_AGENT=BASE_MOUVEMENTS.N_AGENT_RESPONSABLE_MOUVEMENT
WHERE (N°_INDEX_PIECE=" + N_PIECE + ")

Le where est mauvais et reste dois correspondre à ton attente
Et risque d'être plus rapide ;-)

Voila
0
SR2 Messages postés 46 Date d'inscription samedi 17 juillet 2004 Statut Membre Dernière intervention 25 juillet 2006 1
7 févr. 2006 à 00:27
le souci c'est que je fais une double jointure sur la meme table donc je ne comprends pas le base_agent2 ou alors
c'est "INNER JOIN BASE_AGENT BASE_AGENT2" en creant un alias ?

peux tu m'expliquer svp
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
7 févr. 2006 à 08:36
Salut,

Oui c'est une double jointure. (J'ai oublié de mettre la table source ;-(
et c'est un alias de table
tu mets
tableSource tableAlias
et la clause de jointure est utilise la tableAlias.

C'est le même topo pour les tables hierarchique.

Exemple
Gestion des salarie d'une entreprise (avec un responsable)
Gestion d'un menu exemple menu de codesources ;-)

Bon Courage
0
SR2 Messages postés 46 Date d'inscription samedi 17 juillet 2004 Statut Membre Dernière intervention 25 juillet 2006 1
7 févr. 2006 à 20:21
J'effectue cette requete avec ADO et il me fout ce p... de message
et la je comprends pas trop car à mon avis la requete est bonne :

my_request = _
"SELECT *, BASE_AGENT.PRENOM as PRENOM, BASE_AGENT.NOM as NOM, BASE_AGENT2.PRENOM as PRENOM2, BASE_AGENT2.NOM As NOM2 fROM BASE_MOUVEMENTS" + _
" INNER JOIN BASE_AGENT ON (BASE_AGENT.N_AGENT=BASE_MOUVEMENTS.N_AGENT_ORIGINE_MOUVEMENT)" + _
" INNER JOIN BASE_AGENT BASE_AGENT2 ON (BASE_AGENT2.N_AGENT=BASE_MOUVEMENTS.N_AGENT_RESPONSABLE_MOUVEMENT)" + _
" WHERE (N°_INDEX_PIECE = " + N_PIECE + ")"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SR2 Messages postés 46 Date d'inscription samedi 17 juillet 2004 Statut Membre Dernière intervention 25 juillet 2006 1
7 févr. 2006 à 20:22
je suis bete g oublié de donner le message d'erreur
"erreur de syntaxe opérateur absent.."
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
7 févr. 2006 à 21:04
Salut
N°_INDEX_PIECE
le ° ne doit pas passé

regarde en enlevant ce parametre

Essaye de faire la requete sous le créateur de access
Je pense que tu es sous access ??

bon courage
0
SR2 Messages postés 46 Date d'inscription samedi 17 juillet 2004 Statut Membre Dernière intervention 25 juillet 2006 1
7 févr. 2006 à 23:11
oui pour des raisons pratiques je developpe l'appli sous acces en local mais normalement elle tournera sous postgresql

Malheuresement le ° passe tres bien mais je crois que c réellement la double jointure qui pose probleme
car la requete avec une jointure passe impec.

sinon, mais je crois que cela n'est pas possible, ce serai de réaliser une sous requete mais avec en sortie 2 colonnes et non
une colonne par sous requête (NOM ET PRENOM dans une seule sous requete, puis une deuxieme avec NOM2 ET PRENOM2)!!

Mais je t'avoue que la c pourtant simple comme requete mais je ne comprends pas pourquoi ca coince
0
SR2 Messages postés 46 Date d'inscription samedi 17 juillet 2004 Statut Membre Dernière intervention 25 juillet 2006 1
7 févr. 2006 à 23:13
rectification j'utilise une base access mais ne developpepas sous access
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
7 févr. 2006 à 23:48
Salut,

Essaye la requete sur postgres car sous access, il est plus capricieux.
Pour les jointures
il faut des parantheses alors que sous sqlserver il y a pas besoin de parantheses . c'est plus cool ;-)

Pour postgres le langage sql, n'est pas le tout à faire le même.
Alors developpe les requetes sous postgres et tu seras peut etre que ca passe.

tous les moteurs sql ont leur particularité et aucun ne respecte les standards sql a 100%. et access est loin de les respecter comme la plus part des bases commerciales. (sinon le monde sera trop beau '-)


je crois qu'il faut parantheseses les niveau de jointures en les imbricant sous access.

ex (jointure inner join (jointure inner join (jointure)))
je trouve ca bizarre.
0
Rejoignez-nous