INNER JOIN 与 OUTER JOIN 的结合使用
在执行多表连接查询时,INNER JOIN 和 OUTER JOIN 的顺序至关重要。很多人误以为在 OUTER JOIN 后使用 INNER JOIN 会抵消 OUTER JOIN 的效果,但这并不完全正确。
INNER JOIN 的作用
INNER JOIN 会从结果集中移除在连接表中没有匹配行的行。如果匹配列(例如,主键和外键对)中没有 NULL 值,这些不匹配的行无论如何都会被消除。
潜在问题
只有当 INNER JOIN 的 ON 子句指定了 OUTER JOIN 中可能被排除的必选行时,OUTER JOIN 的效果才会被后续的 INNER JOIN 抵消。例如,在以下查询中:
<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 子句要求 address.city_id 不为 NULL,这可能会抵消 LEFT JOIN 的效果。要解决这个问题,应该将第二个 JOIN 更改为 LEFT OUTER JOIN。
最佳实践
尽管不会改变结果,但通常建议在查询中将 INNER JOIN 放在 OUTER JOIN 之前。这有助于提高可读性,并确保在应用可选限制之前应用必要的限制。此外,尽可能避免使用 RIGHT OUTER JOIN,而改用 LEFT OUTER JOIN,这有利于提高清晰度和易于实现。
以上是INNER JOIN 是否会覆盖先前的 OUTER JOIN 结果?的详细内容。更多信息请关注PHP中文网其他相关文章!