Maison >base de données >tutoriel mysql >Pourquoi mes requêtes MySQL LEFT JOIN renvoient-elles moins de lignes que prévu ?
Résoudre le problème des lignes nulles dans MySQL Left Join
Dans MySQL, lors de l'exécution d'une requête de jointure gauche, il est courant de rencontrer un scénario dans lequel toutes les lignes du tableau de gauche ne sont pas renvoyées. Ce problème survient lorsque la condition de jointure est spécifiée dans la clause WHERE au lieu de la clause ON.
Considérez la requête suivante, qui joint les tables jos_hp_properties (pr) et jos_hp_properties2 (pr7) :
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id WHERE pr7.field=23
Comme mentionné par l'utilisateur, cette requête ne renvoie qu'une seule ligne de la première table alors qu'il y a 27 lignes dans la table jos_hp_properties. La raison en est que la condition WHERE pr7.field=23 filtre toutes les lignes de jos_hp_properties qui n'ont pas de valeur de champ correspondante de 23 dans la table jos_hp_properties2.
Pour résoudre ce problème et récupérer toutes les lignes de la première table, y compris la valeur room_price_high de la deuxième table (ou NULL s'il n'y a pas de champ correspondant), la condition WHERE doit être déplacée vers la clause ON de la jointure gauche :
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id AND pr7.field=23
En plaçant la condition de jointure dans la clause ON, la jointure gauche conservera toutes les lignes de la table jos_hp_properties et filtrera uniquement la table jos_hp_properties2 en fonction de la valeur du champ correspondant . Cela garantit que toutes les lignes du premier tableau sont renvoyées, même si certaines n'ont pas de ligne correspondante dans le deuxième tableau.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!