You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL中如何将含Null值的表扩展为视图替换为多记录?

可以实现,具体SQL写法如下

核心思路是拆分两种场景处理:

  • 对于用户权限表中role字段非空的记录,直接保留原数据
  • 对于role字段为NULL的记录,关联组角色表获取该用户所属组的全部角色

假设用户权限表名为user_permissions,组角色表名为group_roles,创建视图的SQL语句如下:

CREATE OR REPLACE VIEW user_full_permissions AS
-- 保留role非空的原始记录
SELECT "user", "group", role
FROM user_permissions
WHERE role IS NOT NULL
UNION ALL
-- 处理role为空的情况,关联组角色表获取全量角色
SELECT up."user", up."group", gr.role
FROM user_permissions up
JOIN group_roles gr ON up."group" = gr."group"
WHERE up.role IS NULL;

验证结果

执行上述视图创建语句后,查询user_full_permissions就能得到你需要的结果:

usergrouprole
example1ABC100
example1XYZ200
example2ABC100
example2ABC150
example2ABC200
example2ABC250
example2ABC300

补充说明

  • 因为user和group是Oracle的关键字,所以用双引号包裹字段名避免语法错误,如果你实际表中的字段名不是这两个,可以去掉双引号
  • 用UNION ALL而非UNION,因为两种场景的记录不会重复,UNION ALL无需去重,执行效率更高

内容的提问来源于stack exchange,提问作者Nova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:57:32