db2遞迴實現字串分組連線操作
db2中的遞迴查詢使用with來實現,也稱為公共表示式,公共表示式在select語句的開始部分採用with子句的形式,在使用公共表示式的查詢中可以多次使用它,並且公共表示式還可以通過取別名來連線到他本身,這樣的話就可以達到迴圈的目的。
遞迴查詢通常有3個部分需要定義:
一:乙個公共表示式形式的虛擬表。
二:乙個初始化表。
三:乙個與虛擬表進行完全內連線的輔助表。
需要使用union all合併上邊3個查詢,然後用select從遞迴輸出中得到最終的結果。
大體上如下形式
with xx(x1,x2,x3) as -------@0
(select a.s,a.s1 from a ----@1
union all ----@2
select * from a,xx where a.s=xx.x1 ------@3
)select ... from xx where .... -------@4
@0:為with體,即虛擬表
@1:為初始化表,這裡需要定義初始化的一些行,也就是你遞迴的出發點,或者說父行,這部分邏輯只執行一次,它的結果作為虛擬表遞迴的初始化內容。
@2:這裡必須用union all
@3:這裡需要定義遞迴的條件(輔助表),這裡定義遞迴的邏輯,需要注意的是父行和子行進行連線的時候邏輯一定要清楚父子關係,不然很容易變成死迴圈的,這裡首先將初始化表的結果作為條件進行查詢,在把執行的結果新增到虛擬表中,只要這裡能查詢出來記錄,那麼就會進行下一步遞迴迴圈。
@4:這裡就是對虛擬表的查詢語句。
需求:一張實時表,乙個人每到乙個地方,就有一條記錄存在,存放樣例:
張三 上海
張三 杭州
.....
要求,按人名進行彙總,將他到過的地方拼接,中間用'#'分隔
資料準備:
--建立表:
create table recursive_test
(user_name varchar(12),
city varchar(12));
--資料插入
insert into recursive_test(user_name,city)
values ('張三','杭州'),('張三','鄭州'),('李四','杭州'),
('張三','南昌'),('李四','廣州'),('王五','北京');
-----遞迴實現:
with recursive_test_par(user_name,city,rk_num) as(
select user_name,city,row_number() over(partition by user_name) --分組,生成序列,自我關聯之用
from recursive_test
),city_join(user_name,city,r_num) as(
select user_name,cast(city as varchar(100)),rk_num from recursive_test_par where rk_num=1
union all
select a1.user_name,cast(a1.city||'#'||b1.city as varchar(100)),a1.r_num+1
from city_join a1,recursive_test_par b1
where a1.user_name=b1.user_name and a1.r_num=b1.rk_num-1
) select a.user_name,a.city from city_join a inner join
(select user_name,max(r_num) r_num from city_join
group by user_name) b
on a.user_name=b.user_name and a.r_num=b.r_num;
--結果: 王五
北京李四
杭州#廣州
張三杭州#鄭州#南昌
DB2字串連線
db2字串連線 db2字串連線和oracle資料庫相同,使用 進行db2字串連線,其使用方式和mssqlserver中的加號 一樣。比如執行下面的sql語句 select 工號為 fnumber 的員工姓名為 fname from t employee where fname is notnull ...
DB2字串連線
db2字串連線 db2字串連線和oracle資料庫相同,使用 進行db2字串連線,其使用方式和mssqlserver中的加號 一樣。比如執行下面的sql語句 select 工號為 fnumber 的員工姓名為 fname from t employee where fname is not null...
了解DB2資料庫中DB2字串
db2字串是db2資料庫中的基礎知識,下面就為您分類介紹db2字串,供您參考,如果您對db2字串方面剛興趣的話,不妨一看。db2字串是位元組序列。db2字串包括 char n 型別的定長字串和 varchar n long varchar 或 clob n 型別的變長字串。字串的長度就是序列中的位元...