说几乎所有in的语句都可以转换成exists,从而提高效率.该怎么转换?
   如这句:select dept_no from p_dinner_user t where t.tibco_pk in (select rowid from dinner_user t2 where to_char(creat_date,'yyyy mmdd')='0116')另:是不是exists中一定要子查询?请高人指点,谢谢!

解决方案 »

  1.   

    select dept_no from p_dinner_user t 
    where  exists (select 'X'from dinner_user t2 where to_char(creat_date,'yyyy mmdd')='0116'  and t.tibco_pk=t2.rowid);另:是不是exists中一定要子查询?
    ----------------------------------------
    不尽然
      

  2.   

    呵呵~  我前段时间刚掂明白exists的问题,开心啊~~~楼主的sql可化为:select dept_no from p_dinner_user t where exists (select rowid from dinner_user t2 where to_char(creat_date,'yyyy mmdd')='0116' and t.tibco_pk=t2.rowid)
      

  3.   

    select dept_no from p_dinner_user t where exists (select 1 from dinner_user t2 where t.tibco_pk =t2.rowid and to_char(creat_date,'yyyy mmdd')='0116' )exists 一般都有子查询,否则和in 的效率一样,改过来也没有意义
      

  4.   

    select dept_no from p_dinner_user t where exists (select 1 from dinner_user t2 where t.tibco_pk =t2.rowid and to_char(creat_date,'yyyy mmdd')='0116' )exists 一般都有子查询,否则和in 的效率一样,改过来也没有意义
      

  5.   

    select dept_no from p_dinner_user t where exists (select '' from dinner_user t2 where t.tibco_pk = t2.rowid and to_char(creat_date,'yyyy mmdd')='0116')
      

  6.   

    select dept_no from p_dinner_user t where exists (select 1 from dinner_user t2 where to_char(creat_date,'yyyy mmdd')='0116' and t.tibco_pk=t2.rowid)总结下来,还是IN 的效率比 exists 好,
    表中数据量超出100W条,就能感觉得出!
      

  7.   

    DAY DAY UP UP 学习学习~~~
      

  8.   

    to_char(creat_date, 'yyyy   mmdd ')= '0116 ' 
    查出来和这个能相等吗?或者帮我解释一下,谢谢了。
      

  9.   

    存在子查询的情况下,exists的效率比in高,是因为exists会引用表的索引,而in则是遍历所有表的所有记录
      

  10.   

    不好意思打错了,是表的所有记录,Oracle里是这样的