目的:从表A中找出ID在表B中但不在表C中的记录方法一:select * from A where ID in B and ID not in C方法二:select * from A where ID in (B-C)那种方法比较高效率??其实就是in+not in的组合 与 minus 哪个效率高??

解决方案 »

  1.   

    方法二:select * from A where ID in (B-C) 表扫描的次数比较小
      

  2.   

    还可以用外关联,效率也很高,但是所有的ID都要有索引SELECT a.id
      FROM a JOIN b ON(a.id=b.id)
      LEFT OUTER JOIN c ON(a.id=c.id)
     WHERE c.id IS NULL;
      

  3.   


    如果ID不是主键,ID重复率比较高,效率很低
      

  4.   

    用EXISTS替代IN
    在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率.
      

  5.   

    select * from A inner join B 
              on A. ID = B.ID where not exists (
      select 1 from C where C.ID = A.ID);
      

  6.   


    select * from a,b,c
    where a.id=b.id
    and b.id=c.id(+)
    and b.id is null;这样效率较高