在数据库连接中,经常需要结合来自多个表的数据,同时应用某些过滤条件。考虑以下场景:
您想从settings
表中检索默认设置,并根据需要为特定角色从character_settings
表中检索特定角色的设置。但是,下面的查询只返回角色设置与特定值匹配的默认设置,如果未定义角色设置,则忽略默认设置:
<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>
为了检索所有默认设置,并在可用时获取角色设置,我们需要将过滤条件移动到连接子句:
<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>
通过将WHERE
子句放在连接条件中,我们指定只有左连接成功的行才会包含在结果集中。这允许我们检索默认设置,同时仍然考虑角色特定设置的可能性。
以上是如何在 SQL 中执行带有条件过滤的左连接?的详细内容。更多信息请关注PHP中文网其他相关文章!