PostgreSQL多关联表查询:获取指定用户所属的所有项目
获取用户所属组织的所有项目的原生SQL
简洁版SQL语句
SELECT p.* FROM project p JOIN organization_membership om ON p.owner = om.organization_id WHERE om.user_id = :id;
高效版(使用EXISTS子查询)
若用户所属组织较多但对应项目较少,这种写法性能更优:
SELECT p.* FROM project p WHERE EXISTS ( SELECT 1 FROM organization_membership om WHERE om.organization_id = p.owner AND om.user_id = :id );
关于你之前尝试的问题说明
- 第一段SQL仅关联了
organization和organization_membership表,完全未涉及project表,因此只会返回用户所属的组织信息,无法获取项目数据; - 第二段SQL逻辑本身无错误,但冗余了
organization表的关联(project.owner直接关联organization.id,organization_membership.organization_id也关联organization.id,外键约束已能保证关联性,无需额外关联该表)。若查询结果为空,大概率是该用户所属组织下未创建任何项目,或是绑定的:id参数值不正确。
内容的提问来源于stack exchange,提问作者Gegi Janiashvili
相关产品推荐
相关产品推荐

