Sql server 什么是「;“左”;及;对",;中间SQL联接中的表?

Sql server 什么是「;“左”;及;对",;中间SQL联接中的表?,sql-server,join,Sql Server,Join,这可能是一个愚蠢的问题,但为了消除这个大脑障碍,在我的最后两个连接中,哪个表是“左”表,哪个表是“右”表?这是否取决于与“on”对应的列表中的第一个?我可以编写查询并确保正确的结果,但在技术层面上理解它有困难。。。在处理上述示例中的中间表时 SELECT * FROM Table a INNER JOIN Table b on a.ID = b.ID LEFT JOIN Table c on a.ID = c.ID LEFT JOIN Table d on c.Something = d.Som

这可能是一个愚蠢的问题,但为了消除这个大脑障碍,在我的最后两个连接中,哪个表是“左”表,哪个表是“右”表?这是否取决于与“on”对应的列表中的第一个?我可以编写查询并确保正确的结果,但在技术层面上理解它有困难。。。在处理上述示例中的中间表时

SELECT * FROM Table a
INNER JOIN Table b on a.ID = b.ID
LEFT JOIN Table c on a.ID = c.ID
LEFT JOIN Table d on c.Something = d.Something -- which is left vs right
LEFT JOIN Table e on b.Something = e.Something -- which is left vs right
c是左边,d是右边

LEFT JOIN Table d on c.Something = d.Something
b是左边,e是右边

LEFT JOIN Table d on c.Something = d.Something

您要连接到查询的表(在本例中为d和e)位于右侧,因此您要连接的上一个查询中的任何键都来自左侧表(c和b)。

想象一下,每次添加表时,您都在构建水平层次结构

在本例中,您从表A的
开始,这样就成为了层次结构的顶层(位于最左侧)

当您
内部联接表b
时,它将成为第二级,位于表a的右侧。在此联接中,表a位于左侧,表b位于右侧

LEFT JOIN Table d on c.Something = d.Something
您的
左连接也会发生同样的情况

还值得注意的是,join的
ON
子句中列的顺序并不重要

LEFT JOIN Table e on b.Something = e.Something
指与以下内容相同:

LEFT JOIN Table d on d.Something = c.Something
LEFT JOIN Table e on e.Something = b.Something

因为表的添加顺序会影响它们在联接的哪一侧,而不是
on
子句的顺序。

因此,左边是列表中“第一个”的那一行,逐行检查编辑和解释。我意识到在我点击“Post”大约5毫秒后需要解释一下。好吧,为了非常清楚,“on”指定要连接哪些列,前面的表在这个“on”中之前已经连接过的就是“left”表。是这样吗?是的。在该联接之前,查询中包含的任何内容都算作“left”。因此,就您当前的联接而言,以前联接的表中的任何列都是“左”列。谢谢。我真的很感激你的回答。为什么投反对票?对很多人来说,这是一个令人困惑的领域。