用户表:
用户ID 用户名称
01 Mike
02 Tom
03 John权限分配表:
用户ID 权限ID
01 Q1
01 Q2
02 Q1
02 Q3
03 Q2
权限表:
权限ID 权限名称
Q1 权限1
Q2 权限2
Q3 权限3若想得到像下面这样的结果集,如何写SQL文 ?
用户ID 用户 权限
01 Mike 权限1,权限2
02 Tom 权限1,权限3
03 John 权限2
用户ID 用户名称
01 Mike
02 Tom
03 John权限分配表:
用户ID 权限ID
01 Q1
01 Q2
02 Q1
02 Q3
03 Q2
权限表:
权限ID 权限名称
Q1 权限1
Q2 权限2
Q3 权限3若想得到像下面这样的结果集,如何写SQL文 ?
用户ID 用户 权限
01 Mike 权限1,权限2
02 Tom 权限1,权限3
03 John 权限2
insert into u1 values('01','mike');
insert into u1 values('02','tom');
insert into u1 values('03','john');create table t22(id varchar2(20),pid varchar2(20));
insert into t22 values('01','Q1');
insert into t22 values('01','Q2');
insert into t22 values('02','Q1');
insert into t22 values('02','Q3');
insert into t22 values('03','Q2');create table pt (pid varchar2(20),pname varchar2(20));
insert into pt values('Q1','权限1');
insert into pt values('Q2','权限2');
insert into pt values('Q3','权限3');SQL> set wrap off
SQL> select id,uname,wm_concat(pname)
2 from(
3 select a.id,a.uname,c.pname
4 from u1 a,t22 b,pt c
5 where a.id=b.id
6 and b.pid=c.pid)
7 group by id,uname
8 /ID UNAME WM_CONCAT(PNAME)
-------------------- -------------------- -------------------------
01 mike 权限1,权限2
02 tom 权限1,权限3
03 john 权限2
(select a.用户ID,a.用户名称 用户,c.权限名称,row_number()over(partition by a.用户ID order by c.权限名称)rn from
A inner join B on A.用户ID=B.用户ID
inner join C on B.权限ID=C.权限ID)t
start with rn=1
connect by rn-1=prior rn and 用户ID=prior 用户ID
group by 用户ID用户ID 用户ID 权限
1 mike 权限1,权限2
2 tom 权限1,权限3
3 john 权限2