用sql连接表

vtwuwzda  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(333)

我正在尝试在sqlbigquery中生成一个表,它是我们服务器的文件夹结构。我想要一个包含文件名和文件夹的表。问题是它所属的文件夹以及包含的子文件夹的信息都在同一个表中,并且它可以具有任意数量的文件夹级别,如下所示:

folder_id Name parent_folder_id
123       One    321
321       root_1  null
456       two     321
789       Three   456

我想要一张这样的table:

parent_folder_name name
root_1              One
'root'             root_1
root_1              two
two                 three

但我不能正确地执行第一步,即将每个文件和文件夹与其父级连接起来。我对我在中看到的答案进行了改编,如下所示:选择b.name,case当b.parent\u project\u id为null时,则选择“root”,否则b.parent\u project\u id结束为parent\u folder\u name,a.name,a.owner\u id from data a join data b on b.parent\u project\u id=a.id
它实际上返回了很好的结果,但大约60%的注册丢失时,我不明白为什么提前感谢

isr3a4wc

isr3a4wc1#

要只得到父母,请使用 left join ,大概是:

SELECT d.name,
       (CASE WHEN dp.parent_project_id is null THEN 'root' ELSE dp.name END) as parent_folder_name,
       dp.name as parent_folder_name, d.name, d.owner_id
FROM data d1 LEFT JOIN
     data dp
     ON d.parent_project_id = dp.id;

您可以添加其他 LEFT JOIN 他必须在等级制度中走得更高。不幸的是,bigquery不支持递归CTE,因此不能使用单个查询遍历整个层次结构。令人高兴的是,bigquery确实支持脚本,因此您可以使用脚本语言来表示这样的遍历。

相关问题