sql - Postgres if else inside left join
问题描述
我有一个users
包含这些列的表:
parent_type (string, can be either `ParentGroup` or `SubGroup`)
parent_id (int)
还有表格parent_groups
以及sub_groups
带有 id 和 name 列。sub_groups
还有一个 parent_id 与parent_groups
我需要从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
}
解决方案
一般来说,可能有更好的方法来执行此操作,并且更改表结构也可能会有所帮助,但您可以使用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';
推荐阅读
- css - NativeScript Angular 动态更改 .ns-root 变量
- c++ - vcxproj 从 vs2013 更新到 vs2015 后的 ICE(内部编译器错误)
- nlp - 在 BERT 中,我需要使用哪种预训练模型进行长文本分类?
- ruby-on-rails - 如何使用 ransack 在 JSONB 中搜索日期时间值
- visual-studio-2019 - VS 16.5.X“项目系统数据流DataflowBlockSlim”出错
- react-native - 是否有任何解决方案可以使用 react-native 删除或隐藏 flexmonster 中的顶部工具栏部分?
- javascript - 如何检测何时标签在Javascript中是空的?
- video - 如果视频 js 播放器中的主要 URL 失败,是否有可能从另一个备用 URL 加载视频?
- mongodb - 如何在 mongo v3.4 中限制内存大小
- testing - 赛普拉斯 PORT 在集成测试中返回未定义(可视)