SQL : LEFT JOIN et MySQL 5
Petite différence entre MySQL 4 et 5...
Imaginez la requête suivante, qui retourne le montant des commandes de clients:
SELECT client.*, pays.*, SUM(commande.montant) FROM client, pays LEFT JOIN commande ON commande.id_client=client.id_client WHERE client.id_pays=pays.id_pays GROUP BY client.id_client
Avec MySQL 4, elle passe sans problème. Avec MySQL 5, vous aurez une erreur du genre "client.id_client n'existe pas"... Alors que si, il existe! Alors, si vous échangez les tables client et pays dans le FROM (FROM pays, client), ca marchera. En gros, il faut que la table sur laquelle on fait le LEFT JOIN, soit en dernier dans le FROM. Vous me direz, ok alors pourquoi ce post?! Ben imaginez plusieurs LEFT JOIN dans la requête, vous faites comment pour mettre toutes les tables concernées en dernier dans le FROM?? loool
La solution consiste tout simplement à mettre les tables du FROM entre parenthèses. On aura alors la requête:
SELECT client.*, pays.*, SUM(commande.montant) FROM (client, pays) LEFT JOIN commande ON commande.id_client=client.id_client WHERE client.id_pays=pays.id_pays GROUP BY client.id_client
Et ça passera sans soucis, avec tous les LEFT JOIN que vous souhaitez ! ;o)
Commentaires
1. Le 6 juin 2006 à 00:12, par PiTiLeZarD
Ajouter un commentaire