知道exists 是替代 IN 的好方法
对与一个对应的条件的查询,比如通过一个no
 select * from A  WHERE exists (select B.no from B Where A.no = B.no)要是两个条件的呢? 比如一个no,还需要一个 CLASS
 能否写成
select * from A  WHERE exists (select B.no ,B.CLASS from B Where A.no = B.no and A.class=B.class )?

解决方案 »

  1.   

    select * from A WHERE exists (select 1 from B Where no = A.no) select * from A WHERE exists (select 1 from B Where no = A.no and class = A.class) 
      

  2.   

    可以
    select * from A  WHERE exists (select B.no ,B.CLASS from B Where A.no = B.no and A.class=B.class ) 在子查询里,你select 的字段列多少只会和语法分析有关,不会影响到其他结果,主要看的是查询条件
      

  3.   

    多个条件也是按一楼的写法,exists后面括号里的select不用带字段,而只用select 1 from ....就可以了
      

  4.   

    exists只判断条件是否满足,如果满足则返回真,跟select里的内容无关.
      

  5.   


    --参考一下,有时自已多动手试一试。SQL> select * from tabcopy3;        ID NAME            SAL BIRTHDATE
    ---------- -------- ---------- -----------
             1 张三              5 
            15 李四              2 
             1 王五              3 
            15 王大麻            4 
             2 赵六             15 1980-8-86 rows selectedSQL> select * from tabcopy4;        ID NAME
    ---------- --------
             1 张三
             2 李四
             3 王五1
             4 
               赵六SQL> select * from tabcopy3 a where exists(select * from tabcopy4 b where a.id=b.id);        ID NAME            SAL BIRTHDATE
    ---------- -------- ---------- -----------
             1 张三              5 
             1 王五              3 
             2 赵六             15 1980-8-8SQL> select a.* from tabcopy3 a, tabcopy4 b where a.id=b.id;        ID NAME            SAL BIRTHDATE
    ---------- -------- ---------- -----------
             1 张三              5 
             1 王五              3 
             2 赵六             15 1980-8-8SQL> 
      

  6.   

    首先,楼主的第一句话就大错特错了!
    若真要是你说的这样,ORACLE还要IN干什么?
    用IN或者是用EXISTS主要取决于结果集数据量的多少!并不是说所有地方用EXISTS都是最快的!
    其他的如楼上诸位所说!
      

  7.   

    可以那样写,赞同楼上的说法,不是exists运行比in快,只是在特定的情况下
      

  8.   


    对的,只不过是大多数情况下,EXISTS快点