gpt4 book ai didi

sql - 在任何 OUTER JOIN 之后使用 INNER JOIN 是否真的会使 OUTER JOIN 的效果无效?

转载 作者:行者123 更新时间:2023-12-02 08:02:41 29 4
gpt4 key购买 nike

换句话说,对于嵌套/多个 JOIN SQL 语句,是否应该始终首先使用 INNER JOIN(要么将其放在顶部行或通过使用括号首先 INNER JOIN 两个表)并确保它在任何 OUTER JOIN 之前(LEFTRIGHT完整)?


我的理解是匹配列(例如,主键列和外键列)通常没有 NULL 值。当 INNER JOIN 被另一个表编辑时,OUTER JOIN 结果中的任何不匹配行(包括 NULL)都将被删除,仅仅是因为没有将匹配 NULL!!

(顺便说一句,我从来没有使用都具有 NULL 的列连接任何两个表,因此,我不会评论 NULL 值是否匹配INNER JOIN-ing 表时的 NULL 值。我猜至少,这种情况极为罕见)

最佳答案

如果内部联接的 ON 子句要求出现应该是可选的行,则后续的内部联接只会“基本上使”外部联接无效。在这种情况下,重新排序连接要么不起作用,要么无济于事;相反,唯一的解决方法是将内部联接更改为适当的外部联接。

因此,例如,这工作正常:

    SELECT *
FROM person
LEFT JOIN address
ON person.address_id = address.id
INNER JOIN email
ON person.email_id = email.id

并且等同于将左外连接(第 3-4 行)移动到内部连接(第 5-6 行)之后得到的结果;而这并没有按预期工作:

    SELECT *
FROM person
LEFT JOIN address
ON person.address_id = address.id
INNER JOIN city
ON address.city_id = city.id

因为第二个ON子句只有在address.city_id为非空时才能满足。 (在这种情况下,正确的解决方法是将内连接更改为左外连接。)

也就是说,我同意 Gordon Linoff 的观点,即通常最好将内部联接放在左外部联接之前;这是因为内部联接倾向于指示更多“基本”限制,因此这种排序通常更具可读性。 (我同意 Gordon Linoff 和 Shawn 的观点,即通常最好避免使用右外连接。)

关于sql - 在任何 OUTER JOIN 之后使用 INNER JOIN 是否真的会使 OUTER JOIN 的效果无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55094277/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com