你的语句到底是什么样的?exists在那?

解决方案 »

  1.   

    估计是你的YJFXM中有NULL值.
      

  2.   

    真没看到你的代码在哪里啊?
    not in 有了,exists呢?
    当然, exists 一般会比not in 快。
      

  3.   

    是我写错了,不好意思!!!因为我想根据另外一个表来检验这个表里的字段的值是不是合法的,所以用了两种方法:
    1  SELECT * FROM 表1 WHERE YJFXM NOT IN
    (SELECT DISTINCT YJFXM FROM 表2 WHERE 表1.YXDM=表2.YXDM AND 表1.ZYDM=表2.ZYDM)2第二种语句:
    SELECT * FROM 表1 WHERE  NOT EXISTS
    (SELECT * FROM 表2 WHERE 表1.YXDM=表2.YXDM AND 表1.ZYDM=表2.ZYDM)执行过后,有两个问题:1。用IN的那句检查出来的结果要多些(注意:YJFXK内无任何空值及重复的记录值)2。并且当我在400多万记录下测试,EXISTS比IN 只快15秒左右!
    请大家解释解释.
      

  4.   

    你第1个写错了SELECT * FROM 表1 WHERE  NOT EXISTS
    (SELECT 1 FROM 表2 WHERE 表1.YXDM=表2.YXDM AND 表1.ZYDM=表2.ZYDM)是最好的!!!也是对的。
      

  5.   

    表1
    aa    bb
    ----------
    a1    b1
    a2    b2
    表2
    ---------
    a1    b1
    a1    b2
    a2    b2你选择表2希望得到
    a1  b1
    a2  b2
    你用你的第一个是错的,会返回所有记录
    a1    b1
    a1    b2
    a2    b2
      

  6.   

    大力,我说简单点,比如
    表1
    YXDM     ZYDM     YJFXM
    A        B        C
    A        B        D
    A        B        E表2
    YXDM     ZYDM     YJFXM
    A        B        A
    A        B        B
    A        B        C因为在表2内没有YXDM=A,ZYDM=B ,且(YJFXM=D或YJFXM=E)的记录
    所以应该把表1中第二条和第三条记录都找出来,我觉得两种语句都应该一样的啊?怎么回事,我短路了?????
      

  7.   

    那你第二条写错了,
    SELECT * FROM 表1 WHERE  NOT EXISTS
    (SELECT * FROM 表2 WHERE 表1.YXDM=表2.YXDM AND 表1.ZYDM=表2.ZYDM and 表1.YJFXM=表2.YJFXM)
      

  8.   

    还可以这样写
    SELECT a.* FROM 表1 a left outer join 表2 b 
       on(a.YXDM=b.YXDM AND a.ZYDM=b.ZYDM and a.YJFXM=b.YJFXM)
    WHERE  b.YJFXM is null试试看效率怎么样?
      

  9.   


    明白了我
    是不是当用EXISTS的时候要比IN要多一个条件,现在我加了一个条件后,两者查询结果都一样了!