Maison > base de données > tutoriel mysql > Pourquoi mon MySQL LEFT JOIN ne renvoie-t-il pas toutes les lignes ?

Pourquoi mon MySQL LEFT JOIN ne renvoie-t-il pas toutes les lignes ?

Barbara Streisand
Libérer: 2024-12-22 13:22:14
original
881 Les gens l'ont consulté

Why Doesn't My MySQL LEFT JOIN Return All Rows?

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal