Select * From (select * from table1 where columns3='1') b columns JOIN table2 a ON a.columns= b.columns1 left join table3 c on c.columns=b.columns1;
把上面的b 表去掉,sql修改为子查询方式!

解决方案 »

  1.   

    把上面的b 表去掉,sql修改为子查询方式!
    -------------
    什么意思?select *会把三个表的列都列出来,那还要子查询干什么?
    Select * From table1 b JOIN table2 a ON a.columns= b.columns1 left join table3 c on c.columns=b.columns1 where b.columns3='1';
      

  2.   

    create global temporary table B AS 
    select * 
    from table1 
    where columns3='1' 
    on Commit Preserve Rows Select * From B JOIN table2 a ON a.columns= B.columns1 left join table3 c on c.columns=B.columns1
      

  3.   

    上面的sql应该是下面这样:下面只是伪代码
    Select a.columns,a.columns,a.columns,b.columns,c.columns From (select * from table1 where columns3='value') b columns JOIN table2 a ON a.columns= b.columns1 left join table3 c on c.columns=b.columns1
    去掉b表,改为子查询。
    因为左右连接查询没有走表的索引,并且用oralce工具测试过,效率没有子查询快!
      

  4.   

    左右连接没有子查询快?我昨天刚把同事的自查询sql改成连接,实际查询效果明显快了非常多啊。