使用多子查询创建SQL视图的正确方法咨询
正确创建该视图的SQL写法
你的原写法问题在于子查询未指定列别名,导致外层查询无法正确识别列。以下是两种简洁的正确写法,无需创建多视图关联:
写法一(简洁版)
直接将两个聚合查询作为列定义:
create or replace view v_monthly_data AS select (select count(*) from pink_floyd) as active_members, (select count(*) from pink_floyd) as branch_members;
写法二(保留子查询嵌套结构)
给每个子查询的结果指定明确列别名,避免表名与列名混淆:
create or replace view v_monthly_data AS select data.active_members, data.branch_members from ( select (select count(*) from pink_floyd) as active_members, (select count(*) from pink_floyd) as branch_members ) as data;
问题说明
原写法中,(select count(*) from pink_floyd pf ) as ACTIVE_MEMBERS仅给子查询结果集(表)命名为ACTIVE_MEMBERS,但该表内的列没有指定别名,外层查询引用的ACTIVE_MEMBERS会被数据库识别为表名而非列名,从而引发错误。通过给子查询结果指定列别名,就能正确映射到视图的输出列。
内容的提问来源于stack exchange,提问作者Raba_Ababa
相关产品推荐
相关产品推荐

