[英]SQL query help needed to get the data from same table with parent child
我的oracle數據庫中有一個表,如下所示:
FolderID Name ParentFolderID
1200 A 1000
1201 B 1000
1202 C 1000
1203 D 1000
1204 E 1200
1205 F 1200
1206 G 1201
1207 H 1205
1208 I 1205
1209 J 1205
在此表中,文件夾ID 1000具有子項1200、1201、1202、1203。文件夾ID 1200具有子項1204、1205。1201具有子項1206。1205具有子項1207、1208和1209。我要查找的是get我要傳遞給查詢的文件夾ID的所有子文件夾ID。 如果傳遞1000,則應返回所有子行和子子行。
謝謝
select folderid, name
from the_unknown_table
start with folderid = 1000
connect by prior folderid = parentfolderId;
嘗試像CONNECT BY查詢;
SELECT
folderid,
name
FROM the_unknown_table
START WITH folderid = :first_folder_id
CONNECT BY PRIOR folderid = parentfolderId;
如果要在一列中用逗號分隔所有內容,請使用SYS_CONNECT_BY_PATH
SELECT
folderid,
SYS_CONNECT_BY_PATH(folderid,',') my_path,
name
FROM the_unknown_table
START WITH folderid = :first_folder_id
CONNECT BY PRIOR folderid = parentfolderId;
標准的SQL方式(等效於按優先級連接)使用遞歸CTE:
DROP SCHEMA opa CASCADE;
CREATE SCHEMA opa;
SET search_path='opa';
CREATE TABLE parents
( id INTEGER NOT NULL PRIMARY KEY
, zname text
, parent_id INTEGER REFERENCES parents (id)
);
INSERT INTO parents(id,zname,parent_id) VALUES
(1000 , '@', NULL)
,(1200 , 'A', 1000)
,(1201 , 'B', 1000)
,(1202 , 'C', 1000)
,(1203 , 'D', 1000)
,(1204 , 'E', 1200)
,(1205 , 'F', 1200)
,(1206 , 'G', 1201)
,(1207 , 'H', 1205)
,(1208 , 'I', 1205)
,(1209 , 'J', 1205)
;
WITH RECURSIVE zopa AS (
SELECT p0.id AS opa_id, p0.id AS id
, p0.zname AS zname, p0.parent_id AS parent_id
FROM parents p0
WHERE NOT EXISTS (
SELECT * FROM parents nx WHERE nx.id = p0.parent_id)
UNION
SELECT
zp.opa_id AS opa_id
, p1.id AS id
, p1.zname AS zname
, p1.parent_id AS parent_id
FROM parents p1
JOIN zopa zp ON zp.id = p1.parent_id
)
select *
FROM zopa ct
WHERE ct.opa_id = 1000
;
結果:
NOTICE: drop cascades to table opa.parents
DROP SCHEMA
CREATE SCHEMA
SET
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "parents_pkey" for table "parents"
CREATE TABLE
INSERT 0 11
opa_id | id | zname | parent_id
--------+------+-------+-----------
1000 | 1000 | @ |
1000 | 1202 | C | 1000
1000 | 1200 | A | 1000
1000 | 1201 | B | 1000
1000 | 1203 | D | 1000
1000 | 1205 | F | 1200
1000 | 1204 | E | 1200
1000 | 1206 | G | 1201
1000 | 1209 | J | 1205
1000 | 1207 | H | 1205
1000 | 1208 | I | 1205
(11 rows)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.