【发布时间】:2012-11-08 09:19:51
【问题描述】:
我确实有一个包含文件列表的表格。有id_folder,id_parrent_folder,size(文件大小):
create table sample_data (
id_folder bigint ,
id_parrent_folder bigint,
size bigint
);
我想知道,每个文件夹(从给定文件夹开始)的每个子文件夹(包括当前文件夹)中有多少文件。鉴于下面发布的示例数据,我希望得到以下输出:
id_folder files
100623 35
100624 14
样本数据:
insert into sample_data values (100623,58091,60928);
insert into sample_data values (100623,58091,59904);
insert into sample_data values (100623,58091,54784);
insert into sample_data values (100623,58091,65024);
insert into sample_data values (100623,58091,25600);
insert into sample_data values (100623,58091,31744);
insert into sample_data values (100623,58091,27648);
insert into sample_data values (100623,58091,39424);
insert into sample_data values (100623,58091,30720);
insert into sample_data values (100623,58091,71168);
insert into sample_data values (100623,58091,68608);
insert into sample_data values (100623,58091,34304);
insert into sample_data values (100623,58091,46592);
insert into sample_data values (100623,58091,35328);
insert into sample_data values (100623,58091,29184);
insert into sample_data values (100623,58091,38912);
insert into sample_data values (100623,58091,38400);
insert into sample_data values (100623,58091,49152);
insert into sample_data values (100623,58091,14444);
insert into sample_data values (100623,58091,33792);
insert into sample_data values (100623,58091,14789);
insert into sample_data values (100624,100623,16873);
insert into sample_data values (100624,100623,32768);
insert into sample_data values (100624,100623,104920);
insert into sample_data values (100624,100623,105648);
insert into sample_data values (100624,100623,31744);
insert into sample_data values (100624,100623,16431);
insert into sample_data values (100624,100623,46592);
insert into sample_data values (100624,100623,28160);
insert into sample_data values (100624,100623,58650);
insert into sample_data values (100624,100623,162);
insert into sample_data values (100624,100623,162);
insert into sample_data values (100624,100623,162);
insert into sample_data values (100624,100623,162);
insert into sample_data values (100624,100623,162);
我尝试使用 postgresql (postgresql docs) 中的示例,但它(显然)不能以这种方式工作。任何帮助表示赞赏。
-- 编辑
我尝试了以下查询:
WITH RECURSIVE included_files(id_folder, parrent_folder, dist_last_change) AS (
SELECT
id_folder,
id_parrent_folder,
size
FROM
sample_data p
WHERE
id_folder = 100623
UNION ALL
SELECT
p.id_folder,
p.id_parrent_folder,
p.size
FROM
included_files if,
sample_data p
WHERE
p.id_parrent_folder = if.id_folder
)
select * from included_files
这行不通,因为每个孩子都有很多父母,因此子文件夹中的行会成倍增加。
【问题讨论】:
-
尽管这不是最快的解决方案,但您是否尝试过使用光标?
-
+1 用于提供测试数据和创建表语句
-
@FlorisPrijt 我没有 - 老实说,我不明白这将如何帮助解决我的问题。
-
您的样本数据看起来很奇怪。为什么有多个条目具有相同的
id_folder和id_parrent_folder组合?这对我来说没有意义。 (顺便说一句,parent 只用一个 r 拼写:应该是id_parent_folder) -
@a_horse_with_no_name 对不起,“父”中的拼写错误数据是这样的,因为我确实有文件列表。在每个文件夹中可以有无限数量的文件。
标签: sql postgresql common-table-expression recursive-query