代码有点多 我举个例子得了原语句:select A.字段,B.字段,C.字段 from A left join B on A.id=B.pId left join C on B.id=C.fId where A的过滤条件 and B的过滤条件 and C的过滤条件现语句:select A.字段,B.字段,C.字段 from (select 字段 from A where A的过滤条件) A left join (select 字段 from B where B的过滤条件) B on A.id=B.pId left join (select 字段 from C where C的过滤条件)C on B.id=C.fId这两个查询结果不一样? 吧第二个改成内联就好了。
代码有点多 我举个例子得了原语句:select A.字段,B.字段,C.字段
from A left join B on A.id=B.pId
left join C on B.id=C.fId
where A的过滤条件 and B的过滤条件 and C的过滤条件现语句:select A.字段,B.字段,C.字段
from (select 字段 from A where A的过滤条件) A
left join (select 字段 from B where B的过滤条件) B on A.id=B.pId
left join (select 字段 from C where C的过滤条件)C on B.id=C.fId这两个查询结果不一样? 吧第二个改成内联就好了。
先说之前的语句: 在on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录
但是后面还有where条件的话,那就是在临时表中进行的过滤
也就是说left join已经变成了inner join 丧失了leftjoin的功能
在说你的
你完全是根据left join的用法来的
所以你俩的查询结果不一样
你就无需在用left join了,直接用正常的内关联即可。