OVH Cloud OVH Cloud

WD10 - syntaxe outer join multiples

7 réponses
Avatar
I.G.LOG
Bonjour,

J'ai une requète avec des join multiples. Je ne me souviens plus quelle
syntaxe valide utiliser !
Doit on mettre des virgules à chaque left outer join ?
Par ailleurs, avec MySQL, est ce que la syntaxe est la même qu'avec WD ?

Voici la requète:

"select T_CARACT._NOM," +...
" from T_CARACT,T_COL" +...
" left outer join T_DONTC on T_DONTC._IDCOL = T_COL._IDCOL" +...
" left outer join T_DONTL on T_DONTL._IDCOL = T_COL._IDCOL" +...
" left outer join T_DONNC on T_DONNC._IDCOL = T_COL._IDCOL" +...
" left outer join T_DONNL on T_DONNL._IDCOL = T_COL._IDCOL" +...
" left outer join T_DONM on T_DONM._IDCOL = T_COL._IDCOL" +...
" where T_COL._TBL = " + :_TBL +...
" and T_CARACT._CAR = T_COL._CAR"

merci pour vous réponses

7 réponses

Avatar
Pierre BOUSQUET
c'est bon sauf que tu aurais pu mettre un JOIN entre T_CARACT et T_COL

I.G.LOG a émis l'idée suivante :
Bonjour,

J'ai une requète avec des join multiples. Je ne me souviens plus quelle
syntaxe valide utiliser !
Doit on mettre des virgules à chaque left outer join ?
Par ailleurs, avec MySQL, est ce que la syntaxe est la même qu'avec WD ?

Voici la requète:

"select T_CARACT._NOM," +...
" from T_CARACT,T_COL" +...
" left outer join T_DONTC on T_DONTC._IDCOL = T_COL._IDCOL" +...
" left outer join T_DONTL on T_DONTL._IDCOL = T_COL._IDCOL" +...
" left outer join T_DONNC on T_DONNC._IDCOL = T_COL._IDCOL" +...
" left outer join T_DONNL on T_DONNL._IDCOL = T_COL._IDCOL" +...
" left outer join T_DONM on T_DONM._IDCOL = T_COL._IDCOL" +...
" where T_COL._TBL = " + :_TBL +...
" and T_CARACT._CAR = T_COL._CAR"

merci pour vous réponses



--
Pierre BOUSQUET

" Ne me dites pas que ce problème est difficile.
S'il n'était pas difficile, ce ne serait pas un problème. "
Avatar
I.G.LOG
Bonjour et merci pour la réponse,
Mais il me semblait qu'avec WD HF classic, il fallait répéter l'alias avant
le left join et mettre des virgules... alors qu'avec d'autres bases la
syntaxe est différente (notamment sous MySQL 4 ?!).
Je vais faire un essai, mais ca m'impose de générer une analyse et des
données de test (j'aurai voulu éviter ça avant d'être sûr)
Encore merci
Avatar
Firetox
Bonjour ,

non la syntaxe

SELECT * FROM matable1 left outer join matable2 on matable1.cle =
maTAble2.cle

fonctionne tres bien sur HF
je viens de faire le test avec le data center ca marche au poil

et sous mysql cette syntaxe est acceptée

Bon dev
@+


"I.G.LOG" a écrit dans le message de news:
45125ff2$0$25935$
Bonjour et merci pour la réponse,
Mais il me semblait qu'avec WD HF classic, il fallait répéter l'alias
avant
le left join et mettre des virgules... alors qu'avec d'autres bases la
syntaxe est différente (notamment sous MySQL 4 ?!).
Je vais faire un essai, mais ca m'impose de générer une analyse et des
données de test (j'aurai voulu éviter ça avant d'être sûr)
Encore merci




Avatar
Firetox
ca c'est normal car il n'y pas cascade des join
par contre si la liason se fait de table en table pas besoin de l'alias
et attention dans cette configuration MySQL n'aimera pas l'alias

par exemple en HF cela fonctionne :
SELECT * FROM
personnel LEFT JOIN obtenir ON personnel.matricule = obtenir.matricule
,personnel LEFT JOIN emploi ON emploi.code_emploi = obtenir.code_emploi


la jointure sera plus complique sur MySQL mais faisable


"I.G.LOG" a écrit dans le message de news:
4512654b$0$5112$
Re-bonjour,

J'essai le cas de jointures multiples !
Après essais, sous WD HF classic (pas fait l'essai en HF C/S) les alias
doivent être répétés à gauche du left join et séparés par des virgules,
comme suit:

SELECT idolprolg
from olprolg left outer join article on article.idarticle > olprolg.idarticle, olprolg left outer join prestat on prestat.idprestat > olprolg.numero where olprolg.numgrp = 0

Ca a l'air de fonctionner (faut je vérifie le résultat) et ça ne plante
pas
à l'exécution.

Mais je crois que sous MySQL (version 4), la syntaxe est différente ?!
(pas
de virgules)
Merci de me confirmer (infirmer) ce doute




Avatar
I.G.LOG
Re-bonjour,

J'essai le cas de jointures multiples !
Après essais, sous WD HF classic (pas fait l'essai en HF C/S) les alias
doivent être répétés à gauche du left join et séparés par des virgules,
comme suit:

SELECT idolprolg
from olprolg left outer join article on article.idarticle olprolg.idarticle, olprolg left outer join prestat on prestat.idprestat olprolg.numero where olprolg.numgrp = 0

Ca a l'air de fonctionner (faut je vérifie le résultat) et ça ne plante pas
à l'exécution.

Mais je crois que sous MySQL (version 4), la syntaxe est différente ?! (pas
de virgules)
Merci de me confirmer (infirmer) ce doute
Avatar
Firetox
suite

par exemple en HF cela fonctionne :
SELECT * FROM
personnel LEFT JOIN obtenir ON personnel.matricule = obtenir.matricule
,personnel LEFT JOIN emploi ON emploi.code_emploi = obtenir.code_emploi



mais pas en mySQL
il faudrait en MySQL

SELECT * FROM
personnel LEFT JOIN obtenir ON personnel.matricule = obtenir.matricule
,personnel PersB LEFT JOIN emploi ON emploi.code_emploi =
obtenir.code_emploi
where personnel.matricule = Pers.matricule

par contre je ne sais pas si HF va rendre une reponse obtimise mais devrait
passe

voila desolé pour les 2 parties du message


"Firetox" a écrit dans le message de news:
451266f6$0$32592$
ca c'est normal car il n'y pas cascade des join
par contre si la liason se fait de table en table pas besoin de l'alias
et attention dans cette configuration MySQL n'aimera pas l'alias

par exemple en HF cela fonctionne :
SELECT * FROM
personnel LEFT JOIN obtenir ON personnel.matricule = obtenir.matricule
,personnel LEFT JOIN emploi ON emploi.code_emploi = obtenir.code_emploi


la jointure sera plus complique sur MySQL mais faisable


"I.G.LOG" a écrit dans le message de news:
4512654b$0$5112$
Re-bonjour,

J'essai le cas de jointures multiples !
Après essais, sous WD HF classic (pas fait l'essai en HF C/S) les alias
doivent être répétés à gauche du left join et séparés par des virgules,
comme suit:

SELECT idolprolg
from olprolg left outer join article on article.idarticle >> olprolg.idarticle, olprolg left outer join prestat on prestat.idprestat >> olprolg.numero where olprolg.numgrp = 0

Ca a l'air de fonctionner (faut je vérifie le résultat) et ça ne plante
pas
à l'exécution.

Mais je crois que sous MySQL (version 4), la syntaxe est différente ?!
(pas
de virgules)
Merci de me confirmer (infirmer) ce doute








Avatar
I.G.LOG
Je vais essayer ce cas sous MySQL (mais faut que je l'installe !!!)
Encore merci

"Firetox" a écrit dans le message de
news:451266f6$0$32592$
ca c'est normal car il n'y pas cascade des join
par contre si la liason se fait de table en table pas besoin de l'alias
et attention dans cette configuration MySQL n'aimera pas l'alias

par exemple en HF cela fonctionne :
SELECT * FROM
personnel LEFT JOIN obtenir ON personnel.matricule = obtenir.matricule
,personnel LEFT JOIN emploi ON emploi.code_emploi = obtenir.code_emploi


la jointure sera plus complique sur MySQL mais faisable