我写了sql查询,有三个连接 .
select *from table1 LEFT JOIN table2 TTS on table1.field1= table2.field2 INNER JOIN table3 on table1.field3 = table2.field4
我的要求是我想要table1的所有条目,所以左边连接table2 . 之后我想用table3连接Inner . 所以请告诉我们sql查询将从左到右或从右到左执行的顺序
通常, join 在逻辑上按照它们的写入顺序实现(除非括号更改顺序) . 因此,正如所写,您的联接是按照您的意图逻辑实现的 .
join
实际运行查询的方式留给执行引擎 .
此外,您的查询相当于:
select . . . from table1 INNER JOIN table2 TTS on table1.field1 = table2.field2 INNER JOIN table3 on table1.field3 = table2.field4 ;
为什么? LEFT JOIN 可能会生成 table1 中 table2 中没有匹配项的行 . field4 将在这些行中为 NULL ,而第二个 on 将过滤掉它们 .
LEFT JOIN
table1
table2
field4
NULL
on
通常,在使用 left join 的查询中,第一个之后的所有 join 都是 left join . 所以你可能打算:
left join
select . . . from table1 LEFT JOIN table2 TTS on table1.field1 = table2.field2 LEFT JOIN table3 on table1.field3 = table2.field4 ;
这将保留 table1 中的所有行,而不管其他两个表中的匹配项 .
1 回答
通常,
join
在逻辑上按照它们的写入顺序实现(除非括号更改顺序) . 因此,正如所写,您的联接是按照您的意图逻辑实现的 .实际运行查询的方式留给执行引擎 .
此外,您的查询相当于:
为什么?
LEFT JOIN
可能会生成table1
中table2
中没有匹配项的行 .field4
将在这些行中为NULL
,而第二个on
将过滤掉它们 .通常,在使用
left join
的查询中,第一个之后的所有join
都是left join
. 所以你可能打算:这将保留
table1
中的所有行,而不管其他两个表中的匹配项 .