select * from t_yxstmp_autoservicecfg a,
( select * from t_yxstmp_autoservicecfg b,t_yxstmp_autoservicecfg d
  where b.autoserviceid=d.autoserviceid 
  and b.autoserviceid like 'TS%' ) c
where a.autoserviceid=c.autoserviceid

解决方案 »

  1.   

    第一条,第三条的形式比较接近,一个是WHERE从句,另一个SQL子句,根据结果来看,我觉得
    SQL语句的where部分执行是优先的,但一般而言,SQL的执行次序(解析次序)是怎么样的,一点
    也不了解,大家能谈谈这方面的认识吗,谢谢!!!
      

  2.   

    最后一个是错误的。
    SQL的执行次序基于两种不同的优化模式:RBO(rule-based optimizer)和
    CBO(cost-based optimizer)
    你可以改变optimizer_mode参数来改变执行顺序。也可以在sql语句中通过注
    释改变SQL执行顺序。
      

  3.   

    执行顺序:
    1.FROM 子句,取相关的表.
    2.WHERE 子句,去除不符合条件的行.
    3.GROUP BY子句,对生成的行分组.
    4.HAVING 子句,去除不满足条件的分组.
    5.SELECT 子句,取需要的列.
    6.ORDER BY 子句,排序.
      

  4.   

    和oracle版本有关,9i sql支持第三种写法(也就是from子句中包含对其他表的联接),但是在9i的pl/sql中不支持。8i无论sql还是pl/sql都不支持。
      

  5.   

    我个人觉得他的第三句不只是一个from子句包含对其他表联接的问题,还有个循环引用的问题.
      

  6.   

    编译原理中会提到语义分析问题,不知道SQL是如何进行语义分析的,不知道那位有这方面的
    认识和资料,望分享.