首页 > 数据库 > mysql教程 > OUTER JOIN 之后的 INNER JOIN 是否会抵消 OUTER JOIN 的效果?

OUTER JOIN 之后的 INNER JOIN 是否会抵消 OUTER JOIN 的效果?

DDD
发布: 2025-01-09 10:41:41
原创
486 人浏览过

Does an INNER JOIN After an OUTER JOIN Negate the OUTER JOIN's Effect?

嵌套 SQL 连接:INNER JOIN 和 OUTER JOIN

INNER JOIN 后面的 OUTER JOIN 会抵消 OUTER JOIN 的效果吗? 在多连接查询中 INNER JOIN 是否应该始终位于 OUTER JOIN 之前?

答案是微妙的。 如果 INNER JOIN 子句要求存在因 OUTER JOIN 而可能是 ON 的列,则后续的 NULL 只会否定 OUTER JOIN。 简单地重新排列连接并不能解决这个问题;您需要将 INNER JOIN 更改为合适的 OUTER JOIN

让我们举例说明:

示例 1(重新排序无关紧要):

<code class="language-sql">SELECT *
FROM person
LEFT JOIN address
  ON person.address_id = address.id
INNER JOIN email
  ON person.email_id = email.id</code>
登录后复制

在这里,重新排序连接不会改变结果。

示例2(重新排序事项):

<code class="language-sql">SELECT *
FROM person
LEFT JOIN address
  ON person.address_id = address.id
INNER JOIN city
  ON address.city_id = city.id</code>
登录后复制

第二个 ON 子句需要一个非 NULL address.city_id。 这会击败 LEFT OUTER JOIN,通过 person 过滤掉没有匹配 cityaddress 记录。要纠正此问题,请将 INNER JOIN 替换为 LEFT OUTER JOIN

最佳实践:

虽然不是严格强制的,但通常建议将 INNER JOIN 放在 OUTER JOIN 之前。 这提高了可读性并阐明了查询的基本过滤条件。 此外,RIGHT OUTER JOIN 通常不太受欢迎,通常可以使用 LEFT OUTER JOIN 重写,以获得更好的清晰度和可维护性。

以上是OUTER JOIN 之后的 INNER JOIN 是否会抵消 OUTER JOIN 的效果?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板