DB2遞迴實現字串分組連線操作

2021-12-30 06:09:24 字數 2003 閱讀 9692

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 型別的變長字串。字串的長度就是序列中的位元...