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
这可能是一个愚蠢的问题,但我可以消除这种大脑阻塞,哪个表是"左"一个和哪个表是"右"在我的最后两个加入中有一个?这取决于列表中的第一个与" on" ?我可以编写查询并确保正确的结果,但只是在技术层面上理解它...在处理上述示例的中间表时。
答案 0 :(得分:1)
LEFT JOIN Table d on c.Something = d.Something
c左,d右。
LEFT JOIN Table e on b.Something = e.Something
左边是e,右边是。
您加入查询的表格(在本例中为d和e)是正确的,因此您加入的上一个查询中的任何键都来自左表(c和b)。
答案 1 :(得分:1)
想象一下,每次添加表格时都要构建一个水平层次结构。
在这种情况下,您从FROM Table A
开始,以便成为层次结构的顶层(位于最左侧)。
当你INNER JOIN Table b
时,它变为第二级并且位于表A的右边。在这个连接表中,A左边,表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
因为添加表的顺序会影响它们所在的连接的哪一侧而不是ON
子句的顺序。