假如有一张表有2字段,user,和state,state可以的取值有1,2,3
表里数据大致这样:
user     state
zhang     1
zhang     2
zhang     1
li        1
li        2
qiang     1
wang      1
wang      1我要实现如下效果,查询出state全为1的user,把列出来。
向上面数据,查询结果就显示:
qiang
wang

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【try_hard_2008】截止到2008-07-16 11:42:19的历史汇总数据(不包括此帖):
    发帖的总数量:33                       发帖的总分数:590                      每贴平均分数:17                       
    回帖的总数量:57                       得分贴总数量:12                       回帖的得分率:21%                      
    结贴的总数量:33                       结贴的总分数:590                      
    无满意结贴数:1                        无满意结贴分:20                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:3.03  %               无满意结分率:3.39  %                  
    敬礼!
      

  2.   

    select distinct user from table where state=1
      

  3.   

    select distinct user from talbe_name where state=12楼和我一样
      

  4.   

    select user from your_table where state='1' group by user;
      

  5.   

    2,3楼没明白我的意思,如果sql那样写的话
    结果就成了
    zhang
    li
    qiang
    wang
      

  6.   

     select user  from (select user, sign(sum(state1)) state from (select decode(state,'1','0','1') state1  from  table) group by user) where state='0' ;
      

  7.   

    select 
    user 
    from table 
    where state=1
    and user not in
    (select user from table where state<>1)
    大致思路是这样,不知道sql语法会不会有错
      

  8.   

    select 
    user 
    from table 
    where state=1
    and user not in
    (select user from table where state<>1)
    大致思路是这样,不知道sql语法会不会有错
      

  9.   

    用我这个应该是可以的
    select user  from (select user, sign(sum(state1)) state from (select decode(state,'1','0','1') state1  from  table) group by user) where state='0' ;
      

  10.   

    select distinct user from table a where a.state=1 and not exist(select 1 from table b where a.user=b.user and b.state<>1 )
      

  11.   

    Select * from table t1 where t1.user in (select distinct user from talbe_name where state=1) and t1.state = 1;
      

  12.   

    select distinct user from table where user not in(select user from table where state<>1);
    保证有用,就是效率可能地点,还没研究到那份上.
      

  13.   

    LZ 能不能把你想要的效果描述清楚一点.
    你试试 先查出满足state为1的结果集,然后把该结果集看做一个表,再进行你想要的效果过滤.
      

  14.   


    (select distinct user from table where state=1)
    minus
    (select distinct user from table where state!=1)
      

  15.   

    minus的效率比in高很多,在10W级数据量上试过.
      

  16.   

    你的逻辑是,状态只发生1的时候才检索出来,出现了1,又出现了2的,过滤掉
    Select t.user from table t where t.user=1  --检索所有是1的 
    and 
    not exists(select 1 from talbe_name t1 where t1.state=2 and t.user=t1.user) --过滤也有2状态的跟用in是一个道理
      

  17.   

    (select distinct user from table where state=1)
    minus
    (select distinct user from table where state!=1)
      

  18.   

    不知道楼主什么意思,如果按照你的描述,那么最简单的sql就是
    select distinct user from table where state='1'

    select user from your_table where state='1' group by user;
      

  19.   

    select user from table  t where state = '1' and 
     no exists(select 1 from table where state = '2' and user = t.user)
    楼主试试看。
      

  20.   

    套子查询就好了..
    或则22楼所说的
    不过我试过了
    sql2000 提示错误..
    好象没这个关键字..
      

  21.   


    mssql 2000可能不支持吧,我平时都使用的oracle ^_^
      

  22.   

    (select distinct user from table where state=1)
    minus
    (select distinct user from table where state!=1)