NOT IN (SELECT NAME from xxx group by Name)关注

解决方案 »

  1.   

    你直接
    SELECT NAME from xxx where NAME = A1
    判断一下记录个数不就完了???何必这样。
      

  2.   

    这帖子应该发去数据库那边,有大力或是邹建在我先给你个最基本的,用existS代替掉in
    NOT EXISTS(SELECT NAME from xxx)
      

  3.   

    A1不在记录中存在是么?
    select count(0) from table where name=A1才发现跟ls思路差不多 了..
      

  4.   

    具体的需求是什么样的?
    或许可以采用其它的SQL语句完成
      

  5.   

    我的妈啊。有这种语句。加个group by Name试看看性能有提升否。
      

  6.   

    select id,datediff(yy,a4,getdate()) as age,case a2 when 1 then '男' when 2 then '女' end as xb,A1,convert(varchar(10),A12,120) as A12,UserBSH from U100.dbo.a where A1 not in ('安丽萍','澳森源','白莎','柏连根','柏万志','柏治华','包桂华','边迦彬','边志芳','卜凤珍','卜凤珍','卜蕾','卜,'蔡振群','曹华杰','曹华杰','曹继红','曹剑敏','曹杰',''余建军','余洁','余金花','余锦滨','余君明','余连法','余林群','余美英','朱启祥','朱庆尔','朱琼瑶','朱松文','朱愫云','朱婷','朱薇','朱伟强','朱小蔚','朱晓群','朱晓阳','朱心禾','朱新豪','朱幸如','朱秀凤','朱秀珍','朱秀珍','朱秀珍','朱秀珍','朱月根','朱子民','朱祖蓉','朱祖蓉','诸荣凤','诸玉香','竺华娟','庄火荣','庄丽毛') and change=5 and ID in (select id=min(id) from U100.dbo.A where change=5 group by userbsh) and A0='107' order by id,A12SQL 简化语句,至于不用 NOT IN (SELECT NAME from xxx)这累语句,我也申明了,数据库服务器不是同一个,而且数据库名也不定,都是动态转变,A1 not in 
    ("已经达到上万数据,而且不停在更新,郁闷的类")
      

  7.   

    如果內表資料太多,樓主可用 exists 
      

  8.   

    建议楼主把那些上万的数据插到一个表中
    然后看看Haiwer的SQL SERVER性能优化综述
    里面有许多优化性能的东东其中“A、NOT IN、NOT EXISTS的相关子查询可以改用LEFT JOIN代替写法”,
    可以帮助楼主解决问题
      

  9.   

    参考~~
    EXISTS/NOT EXISTS一定比IN/NOT IN的效率高吗?
    经常别人说EXISTS比IN快!NOT EXISTS比NOT IN快!然而事实真的如此么?
        我们先讨论IN和EXISTS。
        select * from t1 where x in ( select y from t2 )
        事实上可以理解为:
        select * 
          from t1, ( select distinct y from t2 ) t2
         where t1.x = t2.y;
        ——如果你有一定的SQL优化经验,从这句很自然的可以想到t2绝对不能是个大表,因为需要对t2进行全表的“唯一排序”,如果t2很大这个排序的性能是不可忍受的。但是t1可以很大,为什么呢?最通俗的理解就是因为t1.x=t2.y可以走索引。但这并不是一个很好的解释。试想,如果t1.x和t2.y都有索引,我们知道索引是种有序的结构,因此t1和t2之间最佳的方案是走merge join。另外,如果t2.y上有索引,对t2的排序性能也有很大提高。
        select * from t1 where exists ( select null from t2 where y = x )
        可以理解为:
        for x in ( select * from t1 )
        loop
           if ( exists ( select null from t2 where y = x.x )
           then 
              OUTPUT THE RECORD!
           end if
        end loop
        ——这个更容易理解,t1永远是个表扫描!因此t1绝对不能是个大表,而t2可以很大,因为y=x.x可以走t2.y的索引。
        综合以上对IN/EXISTS的讨论,我们可以得出一个基本通用的结论:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。
      

  10.   

    select a.*
    from XX a
    where not exists
    (select 1 from XXX b where b.name=a.A1)
      

  11.   

    把 not in 换成 exists 试试
      

  12.   

    把not in 后面的用临时表保存用join 代替 in
      

  13.   

    NOT  EXISTS的性能比not in高,因为不需要进行子查询了。所以你换为EXISTS
      

  14.   

    NOT  EXISTS的性能比not in高,因为不需要进行子查询了。 所以你换为EXISTS