kiki2sirom
Messages postés153Date d'inscriptionmardi 17 août 2004StatutMembreDernière intervention23 décembre 2010
-
21 nov. 2007 à 10:45
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 2011
-
5 déc. 2007 à 22:01
Bonjour à tous,
J'ai un souci avec certaines de mes requêtes avec MySQL5 (chez moi)
En MySQL4 je n'ai pas de problème (au bureau)
Explication :
1) déjà j'ai remarqué que des LEFT JOIN "éloigné" ne fonctionnait pas avec MySQL5
from t1, t2 LEFT JOIN t3 on t3.id= t1.id : fonctionne avec MySQL4
aisément modifiable pour MySQL5 (from t1 LEFT JOIN t3 on t3.id=t1.id, t2)
BON OK ça, bien que pas pratique, c'est aisément modifiable...
par contre !!!
2) quand je fais un LEFT JOIN sur 2 tables, eh bien l'erreur est la même, sauf que le principe précité ne fonctionne plus.
EXEMPLE (bidon je précise) :
from t1, t2 LEFT JOIN t3 on t3.id =t1.id and t3.id=t2.id fonctionne avec MySQL4 et pas avec MySQL5
sauf que là..... je suis un peu sceptique sur la résolution de ce problème
l'erreur MySQL dans les 2 cas : erreur 1054, Unable to perform query.... Unknown column 't1.id' in 'on clause'
Dois-je oublier mon appli sous MySQL5 ?
Que dois-je changer concrètement dans ma requête pour qu'elle soit MySQL5 capable ?
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 5 déc. 2007 à 22:01
Salut,
Je persiste à penser qu'il est préférable d'éviter de mettre plusieurs tables dans la clause where quand tu fais une jointure... Puisque c'est déjà une jointure, tu n'as qu'à la formuler explicitement.
J'avais rencontré ce problème de champ inconnu. En ne mettant qu'une seule table dans mon where, c'est passé comme une lettre à la poste.
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 25 nov. 2007 à 01:10
Salut,
Je sais pas pourquoi j'avais pas répondu plus tôt... Désolé pour toute cette attente, j'espère que tu as trouvé une solution, ou alors que c'était pas urgent...
La requête suivante :
SELECT t1.a, t2.b FROM t1, t2;
est une jointure. C'est une syntaxe alternative à LEFT JOIN, qui permet une compatibilité avec ODBC.
Ca, c'est pour le préambule.
Le plus propre, pour faire 2 jointures est encore de les écrire explicitement :
SELECT patati, patata, blabla,
FROM t1
LEFT JOIN t2
ON t1.machin=t2.bidule
LEFT JOIN t3
ON t3.id=t1.id;
Une requête n'est pas limitée à un seul LEFT JOIN.
kiki2sirom
Messages postés153Date d'inscriptionmardi 17 août 2004StatutMembreDernière intervention23 décembre 2010 27 nov. 2007 à 11:35
Salut,
Je ne suis pas d'accord avec toi.
Tu te méprends.
Une requête "from t1, t2..." n'est pas du tout identique à "t1 LEFT JOIN t2 ON ...." mais correspond à t1 INNER JOIN t2 ON ...
Je sais bien qu'une requête n'est pas limitée à 1 seul LEFT JOIN...
Je fais partie d'un groupe de développeurs et nous travaillons entre autres pour une banque où nous avons plusieurs applications pour eux, dont 1 qui comprend 1 BDD de 130 tables dont certaines à plus de 2 000 000 d'enregistrements...
Tout ça pour te dire que si je ne connaissais pas les LEFT JOIN, je serai bien dans la mouise ;-)
Où mon problème se situe :
* il est apparemment, vu ma syntaxe, pas possible avec MySQL5 de faire un LEFT JOIN sur 2 tables ou plus...
mon exemple : from t1, t2 LEFT JOIN t3 on t3.id= t1.id and t3.id=t2.id
est différent de : from t1 LEFT JOIN t2 on t1.id =t2.id LEFT JOIN t3 on t1.id=t3.id
kiki2sirom
Messages postés153Date d'inscriptionmardi 17 août 2004StatutMembreDernière intervention23 décembre 2010 27 nov. 2007 à 11:44
Bon pour être plus clair, je te met mon exemple qui ne fonctionne pas chez moi avec MySQL5 et qui fonctionne avec MySQL4 au bureau :
from facturation, facturation_regle LEFT JOIN taux_change on taux_change.devise=facturation_regle.devise and left(taux_change.date_cours,8)=left(facturation.periode_fin,8)
Merci !!
kiki
Vous n’avez pas trouvé la réponse que vous recherchez ?
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 27 nov. 2007 à 12:25
Salut,
Et avec un WHERE ?
from facturation, facturation_regle LEFT JOIN taux_change on taux_change.devise=facturation_regle.devise
WHERE left(taux_change.date_cours,8)=left(facturation.periode_fin,8)
Sinon, y'a pas de raison que la requête ne fonctionne pas, elle me parait syntaxiquement correcte.
Quel est le message d'erreur que tu obtiens ?
kiki2sirom
Messages postés153Date d'inscriptionmardi 17 août 2004StatutMembreDernière intervention23 décembre 2010 28 nov. 2007 à 11:07
salut,
Merci de te pencher sur mon problème, mais cela ne fonctionne pas, y compris avec les alias :
from facturation as tb1, facturation_regle as tb2 left join
taux_change as tb3 on tb3.devise=tb2.devise and
left(tb3.date_cours,8)=left(tb1.periode_fin,8)
Error 1054 : Unknown column 'tb1.periode_fin' in 'on clause'