查询将返回Table1 中的所有行。仅当id 值在Table1 和Table2 之间相等时,它将加入来自Table2 的行。它还将连接来自Table3 的行,其中id 值在(Table1 AND Table2) 和Table3 的连接结果之间相等。因此,如果Table1 和Table2 之间的第一个连接产生了一个NULL 结果(Table2 中没有等效的id 值),那么第二个连接也将产生一个NULL 结果。例如(使用 SQL Server):
DECLARE @Table1 TABLE([ID] INT, [Value] VARCHAR(20))
INSERT INTO @Table1 VALUES(1, 'Table 1 ID 1')
INSERT INTO @Table1 VALUES(2, 'Table 1 ID 2')
INSERT INTO @Table1 VALUES(3, 'Table 1 ID 3')
DECLARE @Table2 TABLE([ID] INT, [Value] VARCHAR(20))
INSERT INTO @Table2 VALUES(1, 'Table 2 ID 1')
INSERT INTO @Table2 VALUES(3, 'Table 2 ID 3')
INSERT INTO @Table2 VALUES(5, 'Table 2 ID 5')
DECLARE @Table3 TABLE([ID] INT, [Value] VARCHAR(20))
INSERT INTO @Table3 VALUES(2, 'Table 3 ID 2')
INSERT INTO @Table3 VALUES(3, 'Table 3 ID 3')
INSERT INTO @Table3 VALUES(5, 'Table 3 ID 5')
SELECT *
FROM @Table1 T1
LEFT JOIN @Table2 T2 ON T1.ID = T2.ID
LEFT JOIN @Table3 T3 ON T2.ID = T3.ID
此查询将产生以下结果:
ID Value ID Value ID Value
-----------------------------------------------------------
1 Table 1 ID 1 1 Table 2 ID 1 NULL NULL
2 Table 1 ID 2 NULL NULL NULL NULL
3 Table 1 ID 3 3 Table 2 ID 3 3 Table 3 ID 3
为了回答您的问题,Table1 参与第二次联接,因为第二次联接将仅包含来自 Table2 且能够与 Table1 联接的行。换句话说,第二个联接不是Table2 到Table3,而是Table1 和Table2 到Table3 的左联接的结果。因此,在我的示例中,即使 Table2 和 Table3 都有 ID 为 5 的记录,这些记录也不包含在结果集中,因为 Table1 没有 ID 为 5 的记录.