日期:2014-05-17  浏览次数:21027 次

数据库视图查询去重复
Oracle数据库中三张表:
表1: UserInfo  用户基本信息
      UserID   UserName   Gender   MobleNumber
      1100     小张        男      1388888888
      1101     小王        男      1388888888
      ............................
表2: RoleInfo  角色信息表
      RoleID   RoleName    Description
      000001    总经理     总经理的角色
      000002    销售       销售部的角色
      000003    IT部       IT部的角色
      ..........................
表3: UserRole  用户角色关系表(多对多)
      UserID    RoleID
      1100      000001
      1100      000003
      1101      000002
      1101      000003
现有视图sql 语句
select distinct u.userid,u,username,ri.roleid,ri.rolename from userid u left join userrole ur on
u.userid = ur.userid left join roleinfo ri on ri.roleid = ur.roleid

查询结果类似如下:
userid  username   roleid  rolename
1100     小张      000001   总经理
1100     小张      000003   IT部
.......................

也就是说我一个用户分配了多少个角色就有多少查询记录,能否通过改些视图实现如下查询结果
userid  username        roleid               rolename
1100     小张      000001,000003          总经理,IT部
即查询结果每个人对应一条记录,对于分配的角色都合并起来,所有roleid合并到一个字段,所有rolename也合并到另一个字段,求各指点~~~~~~~~~~~~十万火急
          

------解决方案--------------------
select u.userid,u,username,wm_concat(ri.roleid),wm_concat(ri.rolename) from userid u 
left join userrole ur 
on u.userid = ur.userid 
left join roleinfo ri 
on ri.roleid = ur.roleid
group by u.userid,u,username

------解决方案--------------------
userid  username   roleid  rolename
1100     小张      000001   总经理
1100     小张      000003   IT部

在这个结果的基础上用wm_concat
SELECT USERID,USERNAME,WM_CONCAT(ROLEID) FROM TABLE GROUP BY T.USERID,T.USERNAME
------解决方案--------------------
你的数据库版本不支持这个函数,
仅供参考:、
SQL> select * from test1;