我使用的是Delphi6.0在SQL查询中的语句是:select * from ChuKu where DanHao Not In (Select PingZheng From RuKu) 。请看看我的语句有什么问题没有。如果没有问题为什么我这个语句查询出来是空的呢?

解决方案 »

  1.   

    字段都是varchart类型的。有什么问题吗?
      

  2.   

    建议不要用IN 效率比较低的, 用NOT EXISTS, 你是不是字段不对, 把两个表的数据贴出来看看
    SELECT * FROM ChuKu C WHERE NOT EXISTS (SELECT 1 FROM RuKu WHERE PingZheng=C.DanHao)
      

  3.   

    3楼的兄弟,我也听别人说过用NOT EXISTS效率比较高,但是不知道是为什么,能说说这其中的原理吗
      

  4.   

    我觉得EXISTS 后面条件判断为true还是false,而in 则是把数据集查出来,在这个数据集里再去匹配,明显多了点步揍
      

  5.   

    你执行一下Select PingZheng From RuKu,看看有没有数据
    如果有数据,则朝里面添加一条测试数据,令该数据的PingZheng等与一个ChuKu表中DanHao字段里没有的值,在执行一下查询,看看是什么结果
      

  6.   

    看看PingZheng跟DanHao是不是对应的在查询分析器里执行看
      

  7.   

    难道这个语句会快?
    SELECT 1 FROM RuKu WHERE PingZheng=C.DanHao
      

  8.   

    SELECT * FROM ChuKu C WHERE NOT EXISTS (SELECT 1 FROM RuKu WHERE PingZheng=C.DanHao)not in 的执行效率不高
    还有你可以用ShowMessage(SQL.text);
    来查看你的SQL语句,并把你得到的SQL语句拷贝到查询分析器里执行一下
      

  9.   

    In和EXISTS效率问题,不存在那个高那个低,看具体的情况了!!简单举例,下面两种写法产生的结果相同:
    1.select A from t where A Not In('a')
    2.select A from t M where Not EXISTS(select 1 from @t where M.a='a');但看看执行计划:
    第1句实际等价于select A from t where A<>'a',扫描一次即完成,成本100%
    第2句却要进入子查询;外查询每一行,都要进行一次内查询,才输出匹配行,成本各占50%
      

  10.   

    你执行一下Select PingZheng From RuKu,看看有没有数据 
      

  11.   

    肯定是数据的问题。没数据
    效率方面的问题。。差别不大。个人认为NOT EXIST 和 NOT IN 真的差别不大