Postgres,如果里面还有左联接

时间:2019-10-30 17:54:30

标签: sql postgresql

我有一个包含以下列的users表:

parent_type (string, can be either `ParentGroup` or `SubGroup`)
parent_id (int)

,还有具有ID和名称列的表parent_groupssub_groupssub_groups还有一个与parent_groups相关的parent_id

我需要从users表中选择所有列,并将表'parent_groups'加入表中,像这样:

select users.* from users
if (users.parent_type === 'SubGroup') {
    left join sub_groups on users.parent_id = sub_groups.id
    left join parent_groups on sub_groups.parent_id = parent_groups.id
} else if users.parent_type === 'ParentGroup') {
    left join parent_groups on users.parent_id = parent_groups.id
}

1 个答案:

答案 0 :(得分:1)

一般而言,可能有更好的方法来执行此操作,并且更改表结构也可能有所帮助,但是您可以使用UNION进行此操作。您必须确保各列匹配,但是看起来像这样:

select * 
from users
left join sub_groups on users.parent_id = sub_groups.id
left join parent_groups on sub_groups.parent_id = parent_groups.id
where users.parent_type === 'SubGroup'
    UNION
select * 
from users
left join parent_groups on users.parent_id = parent_groups.id
where users.parent_type === 'ParentGroup';