解决方案 »

  1.   


    代码有点多  我举个例子得了原语句: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这两个查询结果不一样?  吧第二个改成内联就好了。         
      

  2.   

    看你给出的例子,我只能看到这一点,left join和on where之间的问题
    先说之前的语句: 在on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录
    但是后面还有where条件的话,那就是在临时表中进行的过滤
    也就是说left join已经变成了inner join 丧失了leftjoin的功能
    在说你的
    你完全是根据left join的用法来的
    所以你俩的查询结果不一样
      

  3.   

    既然是优化之前的sql,如果之前的sql是站在正确的前提下的话
    你就无需在用left join了,直接用正常的内关联即可。
      

  4.   

    条件执行顺序是先on再where,第1个语句的实际结果就是内连接
      

  5.   

    这句话是什么意思? 左联完最后还有where过滤条件,那这个左联就与内联效果一样了?  还请详细给菜鸟我解释一下  还有点模糊