Sql 使用同一表中的父id选择父名称

Sql 使用同一表中的父id选择父名称,sql,postgresql,hierarchical-data,Sql,Postgresql,Hierarchical Data,我有一个带有tag_categories的表,我正在将它与其他一些表连接,这样我就可以得到文件标记的类别,在该表中我有一个列parent_id,它只是同一个表中的另一个标记类别。在像下面这样构造查询时,它会检索父\u id,但我不知道如何获取父名称: 查询: select tags.id, tags.name, tag_categories.name, tag_categories.parent_id, count(files.id) from

我有一个带有tag_categories的表,我正在将它与其他一些表连接,这样我就可以得到文件标记的类别,在该表中我有一个列parent_id,它只是同一个表中的另一个标记类别。在像下面这样构造查询时,它会检索父\u id,但我不知道如何获取父名称:

查询:

select 
    tags.id, 
    tags.name,
    tag_categories.name,
    tag_categories.parent_id,
    count(files.id) 
from 
    "files" 
    inner join "file_tags_join" on "files"."public_id" = "file_tags_join"."file_public_id" 
    inner join "tags" on "file_tags_join"."tag_id" = "tags"."id" 
    inner join "tag_categories" on "tags"."category_id" = "tag_categories"."id" 
where 
    "tags"."category_id" is not null 
group by 
    tags.id, 
    tags.name,
    tag_categories.name,
    tag_categories.parent_id
除了我已经得到的以外,我希望得到的是与该类别的父id匹配的类别名称:

id  name    name    parent_id   count   parent_name
2   tag2    tagCategory2    1   1         tagCategory1
1   tag1    tagCategory1    (null)  1     null    
以下是:

您可以在下面尝试

select 
    tags.id, 
    tags.name,
    tag_categories.name,
    tag_categories.parent_id,
    b.name as parentname,
    count(files.id) 
    from 
    "files" 
    inner join "file_tags_join" on "files"."public_id" = "file_tags_join"."file_public_id" 
    inner join "tags" on "file_tags_join"."tag_id" = "tags"."id" 
    inner join "tag_categories" on "tags"."category_id" = "tag_categories"."id" 
    left join  "tag_categories" b on tag_categories.parent_id = b.id
    where 
    "tags"."category_id" is not null 
    group by 
    tags.id, 
    tags.name,
    tag_categories.name,
    tag_categories.parent_id,b.name
输出:

id  name    name         parent_id  parentname  count
2   tag2    tagCategory2    1       tagCategory1    1
1   tag1    tagCategory1                            1

分享你的样品output@ZaynulAbadinTuhin,底部有一个sql fiddle链接,这很好,但是我们应该能够阅读这个问题并查看您的数据,并且能够理解您的问题。WHERE子句是多余的。(连接条件不会传递任何空值。)@fa06,我已经更新了问题