La jointure gauche ne renvoie pas toutes les lignes : problème de requête MySQL
Dans MySQL, une opération LEFT JOIN est couramment utilisée pour combiner les lignes de deux tables. basé sur une clé commune. Cependant, dans certains scénarios comme celui décrit dans cette question, la requête peut ne pas renvoyer toutes les lignes attendues.
Structure et problème de la requête
Le problème se pose lorsque le WHERE La clause est appliquée directement à la condition de jointure, comme le montre la requête d'origine :
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
Dans ce cas, la clause WHERE restreint la jointure aux seules lignes renvoyées. où pr7.field = 23. Par conséquent, il exclut toutes les lignes de la table jos_hp_properties qui n'ont pas d'entrée pr7.field correspondante avec la valeur 23. Cela conduit la requête à renvoyer moins de lignes que prévu.
Solution : Déplacer la condition WHERE
Pour résoudre le problème et garantir que toutes les lignes de la première table sont renvoyée, la condition WHERE doit être déplacée vers la condition ON du JOIN, comme suit :
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
En déplaçant la condition vers le JOIN, la requête établit d'abord la jointure gauche entre les tables, puis filtre les lignes jointes en fonction des critères spécifiés. Cela garantit que toutes les lignes de la table jos_hp_properties sont incluses dans le jeu de résultats, qu'elles aient ou non une entrée correspondante dans la table jos_hp_properties2 avec pr7.field = 23.
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!