WD12 - MySQL et LEFT JOIN

Le
I.G.LOG
Bonsoir,
J'ai sur mon poste de développement XP Pro une base MySQL 4.1.22 et j'ai des
problèmes avec l'instruction LEFT JOIN, à savoir:

select REFDOC,DATEDOC,IDTYPE,_VALEUR
from DOCUM left join T_DONM on ID_LIGNE = IDDOCUM and ID_COL = 8
where IDDOCUM = 30601

Cette requete fonctionne correctement.
En revanche, celle-ci après, qui devrait donner le meme resultat, ne me
retourne rien (j'ai seulement déplacé le and ID_COL = 8 après le where !!!)

select REFDOC,DATEDOC,IDTYPE,_VALEUR
from DOCUM left join T_DONM on ID_LIGNE = IDDOCUM
where IDDOCUM = 30601
and ID_COL = 8

Est ce que ca veut dire qu'il faut que je revoie toutes les requetes
comportant des LEFT JOIN (et éventuellement celles avec des INNER JOIN) ?

Merci à vous tous
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Firetox
Le #14524391
bonjour,

IDCol fait partie de quelle table ?
si IDCol est dans la table T_DONM

la requete que vous voulez est :

select REFDOC,DATEDOC,IDTYPE,_VALEUR
from DOCUM left join T_DONM on ID_LIGNE = IDDOCUM and ID_COL = 8
where IDDOCUM = 30601

car mettre une colonne de la table liee dans le where casse le left join er
fait un JOIN ou INNER JOIN
donc pour avoir un left join les conditions portant sur la table lie doivent
etre dans le ON et non dans le where

@+

"I.G.LOG" 47e94dce$0$907$
Bonsoir,
J'ai sur mon poste de développement XP Pro une base MySQL 4.1.22 et j'ai
des problèmes avec l'instruction LEFT JOIN, à savoir:

select REFDOC,DATEDOC,IDTYPE,_VALEUR
from DOCUM left join T_DONM on ID_LIGNE = IDDOCUM and ID_COL = 8
where IDDOCUM = 30601

Cette requete fonctionne correctement.
En revanche, celle-ci après, qui devrait donner le meme resultat, ne me
retourne rien (j'ai seulement déplacé le and ID_COL = 8 après le where
!!!)

select REFDOC,DATEDOC,IDTYPE,_VALEUR
from DOCUM left join T_DONM on ID_LIGNE = IDDOCUM
where IDDOCUM = 30601
and ID_COL = 8

Est ce que ca veut dire qu'il faut que je revoie toutes les requetes
comportant des LEFT JOIN (et éventuellement celles avec des INNER JOIN) ?

Merci à vous tous



I.G.LOG
Le #14524381
> IDCol fait partie de quelle table ?
si IDCol est dans la table T_DONM



...
car mettre une colonne de la table liee dans le where casse le left join
er fait un JOIN ou INNER JOIN
donc pour avoir un left join les conditions portant sur la table lie
doivent etre dans le ON et non dans le where



Bonjour,
ID_COL est effectivement dans la table T_DONM (ainsi que ID_LIGNE et
_VALEUR).
La requete avec le "and ID_COL = 8" dans le where fonctionne avec HF classic
!!!, mais pas avec MySQL 4.1.22 (je ne sais pas si c'est pareil avec les
versions plus récentes de MySQL ?!)
Enfin... il va falloir que je revoie les requetes avec JOIN :-(
En tous cas, merci pour votre réponse
Firetox
Le #14524371
Bonjour,

les colonnes dans le select n'ont pas d'incidence dans la jointure
par contre comme je l'ai dit toutes les conditions portant sur la table liée
doivent se retrouver dans le ON
si on veut un LEFT JOIN sinon ce sera un JOIN ou INNER JOIN

et ce que je peux vous dire c'est que c'est valable en SQL et sur MySQL
depuis la version 3.23 !
c'est du SQL 92.

HF doit faire une manip en voyant left join et une condition dans le where
pour ne pas casser le left join mais en SQL vous aurez toujours ce resultat
apres suivant les ecriture sur Oracle cela peut changer mais en general sur
SQLSerer, SQLite, MySQL, PostGreSQL vous aurez ce resultat

Bon dev
@+

"I.G.LOG" 47ea0657$0$842$
IDCol fait partie de quelle table ?
si IDCol est dans la table T_DONM



...
car mettre une colonne de la table liee dans le where casse le left join
er fait un JOIN ou INNER JOIN
donc pour avoir un left join les conditions portant sur la table lie
doivent etre dans le ON et non dans le where



Bonjour,
ID_COL est effectivement dans la table T_DONM (ainsi que ID_LIGNE et
_VALEUR).
La requete avec le "and ID_COL = 8" dans le where fonctionne avec HF
classic !!!, mais pas avec MySQL 4.1.22 (je ne sais pas si c'est pareil
avec les versions plus récentes de MySQL ?!)
Enfin... il va falloir que je revoie les requetes avec JOIN :-(
En tous cas, merci pour votre réponse




Publicité
Poster une réponse
Anonyme