一个表A里面有类似这样的记录:
id   name   role
1    aa     1
1    aa     2
2    bb     3
3    cc     4因为同一个id,有不同角色,在查询的时候,有这么个需求:根据指定role查询这个id下所有的记录。
例如,条件role=1
现在要得到的数据:
1    aa     1
1    aa     2
请问大家,这个SQL用一条语句改怎么写?
先谢谢了

解决方案 »

  1.   

    select a.*
     from a,
        (select id from a where role = 1) a1
    where a.id=a1.id
      

  2.   

    SQL>  SELECT * FROM test ;
     
    ID1 NAME1 ROLE1
    --- ----- -----
    3   cc    4
    2   bb    3
    1   aa    2
    1   aa    1
     
    SQL> 
    SQL>  SELECT *
      2     FROM TEST A
      3    WHERE EXISTS (SELECT 1
      4             FROM TEST B
      5            WHERE B.ID1 = A.ID1
      6              AND B.ROLE1 = '1')
      7  ;
     
    ID1 NAME1 ROLE1
    --- ----- -----
    1   aa    2
    1   aa    1
     
    SQL> drop table test;
      

  3.   


    select A.* from A where role=1 and id=1
      

  4.   


    select * from table where id in (select t.id from table t where t.role='指定Role')
      

  5.   

    感觉应该写个procedure,然后传个参数过来吧
      

  6.   

    select * from a where id in(select id from a where role=1)