J'ai un problème de syntaxe assez currieux quand j'attaque une base de donnée de prod, alors que le même problème ne se pose pas tant je travaille en local sur une base répliquée que je fais tourner sous une version plus récente de MySQL
Pour simplifier le problème, suposons que j'ai dans ma base trois tables (table1, table2, table3) avec un champ à chaque fois (ID1, ID2, ID3).
Pour une raison que je ne vous expliquerai pas, je dois définir une table dérivée (une sous-requête) avec une jointure entre table1 et table2 puis faire une jointure entre le résultat de ma requête et la table3.
2 syntaxes possibles (le terme "blablabla" remplace la définition de ma table dérivée, à laquelle j'ai donné le nom de sousrequete) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT sousrequete.ID1, table3.ID3 FROM table3 INNER JOIN (blablabla) sousrequete ON (sousrequete.ID2 = table3.ID3)Quand je fait tourner les deux requêtes sous MySQL 5.0.37, elles me renvoient le même résultat, ce qui semble normal !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT sousrequete.ID1, table3.ID3 FROM (blablabla) sousrequete INNER JOIN table3 ON (sousrequete.ID2 = table3.ID3)
Par contre, sous MySQL 4.1.13, seule la première fonctionne. La seconde me renvoie ce message d'erreur :
Etonnant, non ?You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'sousrequete INNER JOIN table3 ON (sousrequete.ID2 = table3.ID3)' at line 5
Si je n'avais qu'une seule table dérivée, je pourrait résoudre le problème en la mettant systématiquement comme deuxième élément de ma jointure, mais, en vrai, j'ai plusieurs table dérivées...
Quelqu'un a une idée ?
Partager