La jointure gauche ne renvoie pas toutes les lignes
Question originale :
Une requête MySQL impliquant un La jointure externe gauche renvoie une seule ligne au lieu de toutes les lignes de la table principale. La condition de jointure inclut un filtre sur un champ de la table secondaire. Comment sélectionner toutes les lignes de la table principale, y compris la valeur de la table secondaire où le champ répond aux critères de filtre ?
Solution :
Le problème vient de placer la condition WHERE après le JOIN. En le déplaçant vers la clause JOIN elle-même, la requête garantit que la jointure correspond uniquement aux lignes qui répondent aux critères de filtre. Voici la requête modifiée :
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id AND pr7.field=23
Dans cette requête, la condition WHERE n'est plus dans la clause WHERE séparée après le JOIN. Au lieu de cela, il a été incorporé dans la clause ON de JOIN, garantissant que seules les lignes où pr7.field vaut 23 sont jointes. Cela permet de sélectionner toutes les lignes de jos_hp_properties, y compris celles qui n'ont pas de correspondance dans jos_hp_properties2, qui auront une valeur NULL pour pr7.value.
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!