使用过滤后的左侧表进行左连接
这个问题讨论了从两个表中检索数据的问题,其中左侧表中的 WHERE 子句阻止了预期结果的出现。目标是从设置表中检索所有默认设置,如果可用,则为特定角色检索任何特定于角色的自定义设置。
原始查询:
<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>
但是,此查询仅返回为指定角色(character_id = 1)存在匹配的特定于角色的设置的行。为了包含默认设置(即使不存在特定于角色的设置),应将 WHERE 子句移至连接本身:
<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>
此修改后的查询现在有效地执行左连接,其中左侧表(settings)不受任何条件过滤。因此,它检索所有默认设置,同时如果存在任何特定于角色的设置,则可以选择性地包含这些设置。
以上是如何正确地左连接过滤后的右手表以检索所有默认设置和可选的自定义设置?的详细内容。更多信息请关注PHP中文网其他相关文章!