獲取分層查詢的每個級別的計數/總計我有這樣的時間。我正在嘗試使用遞歸關係(分層)編寫查詢(使用Oracle),並獲取存儲在樹中每個節點上下的另一個表中的記錄總數。另一個表只有與葉節點相關的記錄。但是,我想獲得樹中每個節點上下的總數。例如,假設我有兩張桌子。 DIRS包含目錄名稱和遞歸關係鑑別的目錄結構,文件和文件包含一個外鍵DIRS指示文件所在的目錄文件信息:使用CONNECT BY
DIRS
====
DIR_ID
PARENT_DIR_ID
DIR_NAME
FILES
=====
FILE_ID
FILE_NAME
DIR_ID
FILE_SIZE
如果DIRS包含:
DIR_ID PARENT_DIR_ID DIR_NAME
====== ============= ========
1 ROOT
2 1 DIR1_1
3 1 DIR1_2
4 2 DIR2_1
5 2 DIR2_2
和FILES包含
FILE_ID FILE_NAME DIR_ID FILE_SIZE
======= ========= ====== =========
1 test1.txt 5 100
2 test2.txt 5 200
3 test5.txt 5 50
4 test3.txt 3 300
5 test4.txt 3 300
6 test6.txt 4 100
我想,在票數與文件的數目以及返回或下面的每個節點的路徑查詢君主國。基本上是文件數量的彙總。所以查詢結果將類似於:
Path File_Count
===== ===========
/ROOT 6
/ROOT/DIR1_1 4
/ROOT/DIR1_1/DIR2_1 1
/ROOT/DIR1_1/DIR2_2 3
/ROOT/DIR1_2 2
UPDATE SQL腳本來創建示例數據表,以匹配上面:
create table DIRS (dir_id number(38) primary key
, parent_dir_id number(38) null references DIRS(dir_id)
, dir_name varchar2(128) not null);
create table FILES (file_id number(38) primary key
, file_name varchar2(128) not null
, dir_id number(38) not null references DIRS(dir_id)
, file_size number not null
, unique (dir_id, file_name));
insert into DIRS
select 1, null, 'ROOT' from dual
union all select 2, 1, 'DIR1_1' from dual
union all select 3, 1, 'DIR1_2' from dual
union all select 4, 2, 'DIR2_1' from dual
union all select 5, 2, 'DIR2_2' from dual;
insert into files
select 1, 'test1.txt', 5, 100 from dual
union all select 2, 'test2.txt', 5, 200 from dual
union all select 3, 'test5.txt', 5, 50 from dual
union all select 4, 'test3.txt', 3, 300 from dual
union all select 5, 'test4.txt', 3, 300 from dual
union all select 6, 'test6.txt', 4, 100 from dual;
commit;
哪個Oracle的版本? 11g R2添加了遞歸子查詢因子分解,這可能比'connect by'提供更清晰的解決方案。 –
是11g R2。將研究「子查詢因子」。不熟悉這一點。 – GregH
看起來像在Oracle 9.2中添加了子查詢因子 – GregH