OVH Cloud OVH Cloud

Jointure

1 réponse
Avatar
Nicolas
Mon probl=E8me est le suivant, il y a 2 facon d'=E9crire une=20
jointure en SQL :

La 1=E8re g=E9n=E9r=E9e par ACCESS :

SELECT F_DOCENTETE.DO_PIECE, F_COMPTET.CT_INTITULE
FROM F_DOCENTETE INNER JOIN F_COMPTET ON=20
F_DOCENTETE.DO_TIERS =3D F_COMPTET.CT_NUM

La seconde, plus simple:

SELECT F_DOCENTETE.DO_PIECE, F_COMPTET.CT_INTITULE
FROM F_DOCENTETE, F_COMPTET
WHERE F_DOCENTETE.DO_TIERS =3D F_COMPTET.CT_NUM

Jusque l=E0 pas de probl=E8me. Ca se complique avec une=20
jointure droite ou gauche

Voici la requ=EAte g=E9n=E9r=E9e par Access pour une jointure=20
gauche :

SELECT F_DOCENTETE.DO_PIECE, F_COMPTET.CT_INTITULE
FROM F_DOCENTETE LEFT JOIN F_COMPTET ON=20
F_DOCENTETE.DO_TIERS =3D F_COMPTET.CT_NUM;

Je cherche la mani=E8re simple d'=E9crire cette requ=EAte mais=20
je n'ai pas trouv=E9.

Si des gens ont la solution ...

Merci d'avance

Nicolas

1 réponse

Avatar
Michel Walsh
Salut,


Il n'y en a pas sous Jet, et MS SQL Sever suggère fortement de ne pas
utiliser *= ni =*. En somme, "remonter" dans le join:

De

...
FROM a, b
WHERE a.xyz *= b.uvw

on passe à

...
FROM a LEFT JOIN b
ON a.xyz = b.uvw


est-ce vraiment plus compliqué? pas vraiment, et c'est nettement plus
souple lorsqu'il y a plusieurs jointures...


De plus, penser qu'on peut avoir autre chose que des = dans une jointure,
la jointure explicite est nettement plus appropriée.

Enfin, la jointure explicite est toujours (logiquement) évaluée AVANT le
WHERE.



Espérant être utile,
Vanderghast, Access MVP


"Nicolas" wrote in message
news:0c7b01c3bf3d$4fb973d0$
Mon problème est le suivant, il y a 2 facon d'écrire une
jointure en SQL :

La 1ère générée par ACCESS :

SELECT F_DOCENTETE.DO_PIECE, F_COMPTET.CT_INTITULE
FROM F_DOCENTETE INNER JOIN F_COMPTET ON
F_DOCENTETE.DO_TIERS = F_COMPTET.CT_NUM

La seconde, plus simple:

SELECT F_DOCENTETE.DO_PIECE, F_COMPTET.CT_INTITULE
FROM F_DOCENTETE, F_COMPTET
WHERE F_DOCENTETE.DO_TIERS = F_COMPTET.CT_NUM

Jusque là pas de problème. Ca se complique avec une
jointure droite ou gauche

Voici la requête générée par Access pour une jointure
gauche :

SELECT F_DOCENTETE.DO_PIECE, F_COMPTET.CT_INTITULE
FROM F_DOCENTETE LEFT JOIN F_COMPTET ON
F_DOCENTETE.DO_TIERS = F_COMPTET.CT_NUM;

Je cherche la manière simple d'écrire cette requête mais
je n'ai pas trouvé.

Si des gens ont la solution ...

Merci d'avance

Nicolas