SQL多表查询:为每个角色返回全量步骤描述及对应权限值
实现思路
要实现每个role匹配c表全量step的需求,核心是先生成a表所有role和c表所有step的全量组合,再关联b表匹配权限,无匹配时补默认值none。普通的多表左连接只会返回存在关联关系的记录,无法拿到全量step,所以需要先做交叉连接再左连关联表。
最终SQL语句
SELECT a.worker_role_desription, a.role, c.stepid, c.step_description, COALESCE(b.permission, 'none') AS permission FROM a -- 生成role和全量step的笛卡尔积,保证每个role都对应c表所有step CROSS JOIN c -- 左连权限表匹配对应关系 LEFT JOIN b ON a.role = b.role AND c.stepid = b.stepid -- 可选排序,按role和stepid规整结果顺序 ORDER BY a.role, c.stepid;
说明
- 该写法兼容MySQL、PostgreSQL、Oracle等主流关系型数据库
- 如果不需要保留a表中没有任何关联的role,可以根据需要额外加过滤条件
内容的提问来源于stack exchange,提问作者darkenwolf2050
相关产品推荐
相关产品推荐

