什么是"left"和"right"table中间的SQL Join?

What is the "left" and "right" table in an intermediate SQL Join?

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

这可能是一个愚蠢的问题,但这样我就可以消除这个大脑障碍,table 是 "left" 哪个 table 是 "right"我最近两次加入中的一个?这是由列表中与 "on" 相对应的第一个决定的吗?我可以编写查询并确保正确的结果,但只是在技术层面上难以理解它......在处理像上面的例子这样的中间 tables 时。

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

c在左,d在右

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

b在左,e在右。

您要加入查询的 table(在本例中为 d 和 e)是右边的,因此您要加入的上一个查询中的任何键都来自左边 table (c 和 b).

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

在本例中,您从 FROM Table A 开始,因此它成为层次结构的顶层(位于最左侧)。

当你 INNER JOIN Table b 时,它变成了第二层,位于 Table A 的右边。在这个连接中,table A 在左边,table B 在左边对。

你的 LEFT JOIN 也是如此。

还值得注意的是,连接的 ON 子句中列的顺序无关紧要。

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

等同于:

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

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