Maison >base de données >tutoriel mysql >Comment effectuer une jointure à gauche correcte avec une table de droite filtrée pour récupérer tous les paramètres par défaut et les paramètres personnalisés facultatifs ?

Comment effectuer une jointure à gauche correcte avec une table de droite filtrée pour récupérer tous les paramètres par défaut et les paramètres personnalisés facultatifs ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-22 08:04:15762parcourir

How to Properly Left Join with a Filtered Right-Hand Table to Retrieve All Default Settings and Optional Custom Settings?

Jointure à gauche en utilisant la table de gauche filtrée

Cette question traite de la récupération des données de deux tables, où une clause WHERE dans la table de gauche empêche les résultats attendus de se produire. L'objectif est de récupérer tous les paramètres par défaut du tableau des paramètres et, le cas échéant, tous les paramètres personnalisés spécifiques à un rôle spécifique.

Requête originale :

<code class="language-sql">SELECT `settings`.*, `character_settings`.`value`
FROM (`settings`)
LEFT JOIN `character_settings` 
ON `character_settings`.`setting_id` = `settings`.`id`
WHERE `character_settings`.`character_id` = '1'  </code>

Cependant, cette requête ne renvoie que les lignes pour lesquelles il existe un paramètre spécifique au caractère correspondant pour le caractère spécifié (character_id = 1). Afin d'inclure les paramètres par défaut (même s'il n'existe aucun paramètre spécifique au rôle), la clause WHERE doit être déplacée vers la connexion elle-même :

<code class="language-sql">SELECT  `settings`.*, `character_settings`.`value`
FROM    `settings`
LEFT JOIN 
       `character_settings` 
ON     `character_settings`.`setting_id` = `settings`.`id`
        AND `character_settings`.`character_id` = '1'  </code>

Cette requête modifiée effectue désormais efficacement une jointure gauche où la table de gauche (paramètres) n'est filtrée par aucun critère. Par conséquent, il récupère tous les paramètres par défaut tout en incluant éventuellement tous les paramètres spécifiques au rôle s'ils existent.

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!

Déclaration:
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