select * from tbname t1 where t1.rank = '2' and t1.del_flag='F' and t1.mail_type1='局长信箱' and t1.rowid = (select min(t2.rowid) from tbname t2 where t1.name = t2.name)

解决方案 »

  1.   

    select * from table_name where del_flag = 'F' and rank = '2' and mail_type1<>'局长信箱' group by name
      

  2.   

    wylwyl1130(落雪山林) :你的语句里的t1.rowid是什么意思?在表内好象没有rowid这个字段呀!!??????????
      

  3.   

    select * from tbname t1 where t1.rank = '2' and t1.del_flag='F' and t1.mail_type1='局长信箱' and t1.rowid IN (select ROWID from tbname t2 GROUP BY NAME)这种方法也可以。
    ROWID是每一条数据在数据库中的唯一的物理地址,可以作为每个表的字段查询出来。
      

  4.   

    再写一遍,前面的稍微有点问题
    select * from tbname t1 where t1.rank = '2' and t1.del_flag='F' and t1.mail_type1='局长信箱' and t1.rowid IN (select ROWID from tbname GROUP BY NAME)这种方法也可以。
    ROWID是每一条数据在数据库中的唯一的物理地址,可以作为每个表的字段查询出来。
      

  5.   

    hosia(红霞飞) :这是你刚才写的语句我拿去测试后的结果!!!select * from tbname t1 where t1.rank = '2' and t1.del_flag='F' and t1.mail_type1='局长信箱' and t1.rowid IN (select ROWID from tbname GROUP BY NAME)
                                                     ---ORA-00979: 不是 GROUP BY 表达式
      

  6.   

    to:楼主
    rowid是伪列,行的物理地址我的4个条件都满足阿
      

  7.   

    wylwyl1130(落雪山林) :我现在知道rowid的意思了,但是你的SQL语句我拿去运行后没有查询出任何结果呀!!!我也没找出原因在哪里!能再帮忙改一下吗?谢了!!!
      

  8.   

    关键是第三个条件:3、mail_type1等与'局长信箱';rank字段为2的记录的mail_type1的值为空,是要从parent字段的数据查询出它的所属信箱(mail_type1)的值是多少!!!!!!!!!!!!!!!
      

  9.   

    怀疑你的字段有不可见字符,用
    select * from tbname t1 where t1.rank = '2' and t1.del_flag='F' and t1.mail_type1 like '%局长信箱%' and t1.rowid = (select min(t2.rowid) from tbname t2 where t1.name = t2.name)
      

  10.   

    把第三个条件改成
    '局长信箱'=(select mail_type1 from tbname t3 where t1.parent = t3.rank)
    这是相关子查询,会一行一行的进行
    还有你说的那个“parent(上级):指定此数据的上级信箱的ID“中的“信箱的ID“是什么意思?
    信箱哪有什么ID?
    你根据你自己的意思改一下吧
      

  11.   

    select * from tbname t1 
    where t1.rank = '2' 
    and t1.del_flag='F' 
    and parent = 
       (
        select rank from tbname 
        where  mail_type1 = '局长信箱'
        and    rownum=1
       )
      

  12.   

    select * from tbname t1 
    where t1.rank = '2' 
    and t1.del_flag='F' 
    and t1.mail_type1='局长信箱' 
    and t1.Name in ( select Distinct name from tbname )
      

  13.   

    这个查询怎么能实现呢?del_flag='F'可以,但mail_type1='局长信箱'的记录就一个,而且该记录的rank字段值为'1',如果满足上面的要求的话,那结果只能是一个null.
      

  14.   

    回复人: David1289(David) ( ) 信誉:99  2004-08-12 18:16:00  得分: 0  
       select * from tbname t1 
    where t1.rank = '2' 
    and t1.del_flag='F' 
    and t1.mail_type1='局长信箱' 
    and t1.Name in ( select Distinct name from tbname )
     ========================================================
    这种方法不行。 
     
      

  15.   

    name不能重复 所以应该为
    select * from tbname t1 where t1.rank = '2' and t1.del_flag='F' and t1.mail_type1='局长信箱' and t1.name not in (select name from tbname group by
    name having count(*)>1) 
      

  16.   

    select * from tbname t1 where t1.rank = '2' and t1.del_flag='F' and t1.mail_type1='局长信箱' and t1.name in (select * from (select count(name) as aa name from tbname group by name)where aa=1
      

  17.   

    select * from tbname t1 where t1.rank = '2' and t1.del_flag='F' and t1.mail_type1='局长信箱' and t1.name in (select * from (select count(name) as aa name from tbname group by name)where aa=1)
    刚才后面少一个括号;
      

  18.   

    2、rank为2;
    3、mail_type1等与'局长信箱';这不是鬼打架么?
      

  19.   

    select * from tbname t1 where t1.rank = '2' and t1.del_flag='F' and t1.mail_type1='局长信箱' and t1.name IN (select name from (select name,count(1) tt from tbname a group by name) where tt=1)不过按照你的条件和你上面列出的数据应该是没有符合条件的数据呀。
      

  20.   

    select * from tbname t1 where t1.rank = '2' and t1.del_flag='F' and t1.parent in (select rand from tbname where mail_type1='局长信箱')
    ----------------------------------------------------------------
      

  21.   

    根据楼主的意思,“3、mail_type1等与'局长信箱'”应理解为:mail_type1='局长信箱',或者,mail_type1为空,则其至少有一个上级信箱='局长信箱'
    sql如下:select * 
    from tbname t1 
    where t1.rank = '2' 
    and t1.del_flag='F' 
    and '局长信箱' in (select t2.mail_type1 
                       from tbname t2 
                       start with t2.type_info_id=t1.type_info_id
                       connect by t2.type_info_id=prior t2.parent)
    and t1.rowid = (select min(t3.rowid) from tbname t3 where t1.name = t3.name)