Aller au contenu | Aller au menu | Aller à la recherche
Ce matin nous avons été confronté à un problème surprenant au travail. Une requête SQL qui passe très bien sur 2 serveurs mais qui indique qu'un champ est inconnu dans une jointure sur un troisième.
Après observation, la seule chose qui parraissait un peu étrange dans la requête SQL était le fait que l'une des jointures ne se faisait pas dans l'ordre logique. Voici un exemple simplifié de la requête illustrant le problème :
SELECT * FROM `clients` AS c INNER JOIN `groupes` AS g ON g.id = s.id_groupe INNER JOIN `societes` AS s ON s.id = c.id_societe
En toute logique, il aurait fallu faire la jointure sur la table groupes après celle sur la table sociétés. Cependant cette requête passe parfaitement sur deux serveurs. Le second point étonnant est que ces fameux serveurs sont en version 4.1.12 tandis que celui qui pose problème est en 5.0.18. Rétablir l'ordre logique des jointures règle le problème.
Après quelques recherches, il s'avère que ce n'est pas un bug mais une nouvelle fonctionnalité. Afin de mieux coller au standard SQL:2003, MySQL a modifier sa gestion des jointures sur de nombreux points dont celui-ci. En attendant de modifier vos requêtes, vous pouvez rétablir le comportement de MySQL 4.0 en modifiant le mode SQL.
mercredi 12 avril 2006 à 14h47 -
Développement Web
Aucun rétrolien pour le moment.
Les rétroliens pour ce billet sont fermés.
![]()
Tu as utilisé quel mode du coup pour ta requête ? à moins que tu l'aies changé ?
![]()
Olivier> J'ai opté pour la solution la plus propre et la plus pérenne : la modification de mes requêtes.
JMF
le mardi 18 avril 2006 à 17h42
![]()
Je pose la question car je suis confronté à une appli livrée par un client et qu'elle ne passe pas sur mysql 5 à cause de certaines jointures.
pour le coup, un vrai mode mysql-4.0 m'aurait bien aidé.
Les commentaires pour ce billet sont fermés.
© 2003-2008 Jean-Marc Fontaine - Tous droits réservés
XHTML - CSS - DotClear - Technorati
Les billets de ce blog sont sous licence Creative Commons
Piou2fois le jeudi 13 avril 2006 à 11h15