分组组合查询在实际应用中有用到,看了网上的一些例子做个记录,仅作为学习记录
首先创建测试表:
create table TABLE1 ( ID INTEGER, NAME VARCHAR2(10) ) ; create table TABLE2 ( ID INTEGER, ROLE VARCHAR2(10) ); insert into TABLE1 (ID, NAME) values (1, '张三'); insert into TABLE1 (ID, NAME) values (2, '李四'); commit; insert into TABLE2 (ID, ROLE) values (1, '查询'); insert into TABLE2 (ID, ROLE) values (1, '分析'); insert into TABLE2 (ID, ROLE) values (1, '决策'); insert into TABLE2 (ID, ROLE) values (2, '查询'); commit ;
1.用函数进行查询
select table1.*, wmsys.wm_concat(role) from table1, table2 where table1.id = table2.id group by table1.id, table1.name
2.迭代查询
select id, name, ltrim(max(sys_connect_by_path(role, ',')), ',') from(select row_number() over(partition by table1.id order by name) rn, table1.*, role from table1, table2 where table1.id = table2.id) start with rn = 1 connect by prior rn = rn - 1 and prior id = id group by id, name order by id
要是默认用逗号隔开,第一种就行,要是可变字符,用第二种