题目是这样的,有2个表一个权限表P,主键是编号pid,还有列权限值pur
另外一个用户表u,主键是编号uid,然后还有两个列,分别是角色roleid和权限purid,
并且,roleid和purid中的值都是对应p表中的pid,可以包含多个pid的
然后就是查询了,传来权限值pur,就一个,对应的pid
要查的结果是uid,就是这条记录中的roleid或者purid,只要包含这个pid就符合查询结果
就是这个人的多个权限或角色中,只要包含传来的这个,就查出

解决方案 »

  1.   


    select uid 
    from u,(select pid from p where pur = 'xx') b
    where u.pid = b.pid
    or u.roleid = b.pid;
      

  2.   


    u.purid与u.roleid 的值
    可能含有多个b.pid值
    用等号可以?
      

  3.   

    试试这个select uid 
    from u,(select pid from p where pur = 'xx') b
    where u.purid like '%'||b.pid||'%'
    or u.roleid like '%'||b.pid||'%';
      

  4.   

    with p as
    (
    select 100 pid,           1 pur from dual
    union all
    select 200,          2 from dual
    union all 
    select 300,          3 from dual
    ),
    u as
    (
    select 'a'  uids,           100 roleid,     100 purid         from dual
    union all
    select 'b',          100,      100 from dual
    union all 
    select 'c',          200,      200 from dual
    union all 
    select 'd',          300,     300 from dual
    union all 
    select 'e',          100,      100 from dual
    union all 
    select 'f',          200,      200 from dual
    union all
    select 'g',          100,      100  from dual
    )
    select uids 
    from u,(select pid from p where pur = '1') b
    where u.purid = b.pid
    or u.roleid = b.pid;
    如果数据格式是以上的话,可以得到结果
      

  5.   

    5楼还是不行啊,6楼我是完全看不懂啊
    把表格式发来
    sys_user
    记录编号 V_REC_ID Varchar2 (10) PK
    人员ID V_USER_ID Varchar2 (10)
    角色 V_ROLE_REC_ID Varchar2(500) 可以是多个角色,记录SYS_PURVIEW表中的RecId, 
    权限 V_PUR_REC_ID Varchar2(500) 可以是多个权限,记录SYS_PURVIEW表中的RecId, sys_purview
    记录编号 V_REC_ID Varchar2 (10) PK
    权限编码 V_PUR_ID Varchar2(20) 有用到的应该就这几个列
    现在已知权限编码了,目的就是搜索出拥有这个权限的人员
      

  6.   

    select t2.V_USER_ID from 
    sys_user t2
    where exists 
    (select 1 from sys_purview t1 
     where t1.V_PUR_ID = 'inputvalue'
     and t1.V_REC_ID = t2.V_ROLE_REC_ID or t1.V_REC_ID = t2.V_PUR_REC_ID);
      

  7.   

    select a.v_rec_id 
     from sys_user a,(select V_REC_ID from sys_purview where V_PUR_ID ='PS-KHJL-GL') b  where a.V_ROLE_REC_ID like '%'||b.V_REC_ID||'%' or a.V_PUR_REC_ID like '%'||b.V_REC_ID||'%'
    这样写 有错么
      

  8.   

    原来是这个意思,#9修改下,select t2.V_USER_ID from 
    sys_user t2 
    where exists 
    (select 1 from sys_purview t1 
     where t1.V_PUR_ID = 'inputvalue' 
     and (instr(t2.V_ROLE_REC_ID,t1.V_REC_ID) > 0 
          or instr(t2.V_PUR_REC_ID,t1.V_REC_ID) > 0));
      

  9.   

    你不是要得到uid吗?应该取v_user_idselect a.v_user_id  
     from sys_user a,(select V_REC_ID from sys_purview where V_PUR_ID ='PS-KHJL-GL') b  
     where a.V_ROLE_REC_ID like '%'||b.V_REC_ID||'%' 
     or a.V_PUR_REC_ID like '%'||b.V_REC_ID||'%';你运行这个语句报错?还是查不出记录?
      

  10.   

    回复 12楼
    运行那语句,应该是语句出错了11楼的句子 刚在oracle里试了下,可以查出数据
    现在要把完整的东西弄到系统里试下
      

  11.   

    select distinct v_user_id from sys_user where V_ROLE_REC_ID = &V_REC_ID or V_PUR_REC_ID = &V_REC_ID ;
    &V_REC_ID就是传过来的权限编码。
    这个可以吗?
      

  12.   

    select distinct v_user_id from sys_user where V_ROLE_REC_ID = (select V_REC_ID from sys_purview  where V_PUR_ID =:pur)or V_PUR_REC_ID = (select V_REC_ID from sys_purview  where V_PUR_ID =:pur); 
    是不是这样的啊?