2021-1-4工作日誌
阿新 • • 發佈:2021-01-05
今天在進行專案去O改造的時候遇到了一個oracle資料庫和pg資料庫相互轉換的問題:oracle資料庫的start with connect connect by prior這個是用來進行樹形查詢的語句
測試如下:
drop table sr_menu; create table sr_menu( id number(10) not null, parent number(10), title varchar2(50) ); insert into sr_menu values (1, null, 'level 0'); insert into sr_menu values (2, 1, 'level 1'); insert into sr_menu values (3, 1, 'level 1'); insert into sr_menu values (4, 1, 'level 1'); insert into sr_menu values (5, 3, 'level 2'); commit; select * from sr_menu; ID PARENT TITLE ---------- ---------- -------------------------------------------------- 1 level 0 2 1 level 1 3 1 level 1 5 3 level 2 4 1 level 1 select * from sr_menu start with id = 1 connect by prior id = parent; ID PARENT TITLE ---------- ---------- -------------------------------------------------- 1 level 0 2 1 level 1 3 1 level 1 5 3 level 2 4 1 level 1
上面程式碼,start with 會先根據id為1開始查詢他的子節點,在根據查出來的節點查下一層子節點知道查詢完成。
改造成pg資料庫的時候是使用 with recursive
WITH RECURSIVE a AS ( SELECT id, parent, title FROM sr_menu WHERE id = 1 UNION ALL SELECT d.id, d.parent, d.title FROM sr_menu d JOIN a ON a.id = d.parent ) SELECT id, parent, title FROM a; id | parent | title ----+--------+--------- 1 | | level 0 2 | 1 | level 1 3 | 1 | level 1 4 | 1 | level 1 5 | 3 | level 2