数据库视图查询去重复
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
AND PRIOR A = A
GROUP BY A;
结果:
1 2,2,3,5 4,3,4,4
2 2,3 3,4
3 3 4