【问题标题】:Oracle - Unknown identifier when refering to subquery aliasOracle - 引用子查询别名时的未知标识符
【发布时间】:2014-12-09 16:24:51
【问题描述】:

我有以下疑问:

select "Title_ID","Text",
(SELECT LISTAGG("Genre",',') WITHIN GROUP (ORDER BY "Genre") from (SELECT DISTINCT "g"."Genre" from "RegionBroadcasts" left join "Genres" "g" on "RegionBroadcasts"."Genre" = "g".PK_GENRE where "RegionBroadcasts"."Region"=24 and "RegionBroadcasts"."Title_ID"="IDs"."Title_ID")) as "SourceGenres",
(SELECT LISTAGG("Genre",',') WITHIN GROUP (ORDER BY "Genre") from (SELECT DISTINCT "g"."Genre" from "RegionBroadcasts" left join "Genres" "g" on "RegionBroadcasts"."Genre" = "g".PK_GENRE where "RegionBroadcasts"."Region"=1 and "RegionBroadcasts"."Title_ID"="IDs"."Title_ID")) as "TargetGenres",
(SELECT LISTAGG("Channel_Name",',') WITHIN GROUP (ORDER BY "Channel_Name") from (SELECT DISTINCT "Channel_Name" from "ProgrammeChannels" left join "ChannelNames" on "ProgrammeChannels"."Channel"="ChannelNames"."Channel_ID" where "ProgrammeChannels"."Region"=24 and "ProgrammeChannels"."Title_ID"="IDs"."Title_ID")) as "SourceChannels",
(SELECT LISTAGG("Channel_Name",',') WITHIN GROUP (ORDER BY "Channel_Name") from (SELECT DISTINCT "Channel_Name" from "ProgrammeChannels" left join "ChannelNames" on "ProgrammeChannels"."Channel"="ChannelNames"."Channel_ID" where "ProgrammeChannels"."Region"=1 and "ProgrammeChannels"."Title_ID"="IDs"."Title_ID")) as "TargetChannels"

from
((
select "LocalTitle" as "Title_ID" from "RegionBroadcasts2" where "Region" = 24
union
select "GlobalTitle" as "Title_ID" from "RegionBroadcasts2" where "Region" = 24)
intersect
(select "LocalTitle" as "Title_ID" from "RegionBroadcasts2" where "Region" = 1
union
select "GlobalTitle" as "Title_ID" from "RegionBroadcasts2" where "Region" = 1
)) "IDs"

left join "ProgrammeTitles" on "IDs"."Title_ID" = "ProgrammeTitles"."Text_ID"
where "IDs"."Title_ID" <> 1
and "IDs"."Title_ID" is not null
order by "Text";

由于某种原因,在我将“RegionBroadcasts”链接的前 4 个“select listagg”语句中,我有一个“无效标识符”类型的异常。“Title_ID”与 “IDs”。“Title_ID”

就像我没有被授权使用子查询“ID”一样。

我想明确一点,如果我用一个固定的整数值替换“IDs”.“Title_ID”,我会得到一些结果

【问题讨论】:

    标签: oracle subquery alias


    【解决方案1】:

    Oracle 不允许在子查询中使用父列,它们的深度超过 1 级。

    解决此问题的最简单方法是将where 上移一级:

    (SELECT LISTAGG("Genre",',') 
            WITHIN GROUP (ORDER BY "Genre") 
     from (SELECT DISTINCT "g"."Genre", "RegionBroadcasts"."Title_ID" tmp_title_id 
           from "RegionBroadcasts" left join "Genres" "g" on "RegionBroadcasts"."Genre" = "g".PK_GENRE where "RegionBroadcasts"."Region"=24
          ) 
     where tmp_title_id = "IDs"."Title_ID") as "SourceGenres"
    

    它可能会对性能产生负面影响,但我不确定它在这里是否重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      相关资源
      最近更新 更多