ORA-00904 嵌套的标识符无效 select

ORA-00904 invalid identifier for nested select

我在这个错误上卡了2个小时。

我嵌套了 select 以获得第一个值。

select tbl.table_name,
       (select distinct(FirstItem)
       from
           (select first_value(column_name) over (order by timestamp asc rows unbounded predecing) as FirstItem
           from log_table_b l
           where tbl.assignment_no = l.rpt_no)
       ) as "USERNAME",
from prod_table tbl;

它returns这个错误:

ERROR at line 6:
ORA-00904: "TBL"."ASSIGNMENT_NO": invalid identifier

我尝试了很多东西,none 似乎对我有帮助。

您不能在内部子查询中使用父 table。在这里你可以如何做到这一点:

with tmp_table as 
(
    select rpt_no, first_value(column_name) over (order by timestamp asc rows unbounded predecing) as FirstItem
    from log_table_b l
) select distinct tbl.table_name, firstItem
from prod_table tbl
join tmpTable on tmp_table.rpt_no = tbl.assignment_no;

您可能想为 tmp_table

找一个更具描述性的名称

问题是您只能将引用从外部查询传递到下一个子查询级别。

这里有几个备选方案:

select tbl.table_name,
       (select min(column_name) keep (dense_rank first order by tstamp asc)
        from   log_table_b l
        where  tbl.assignment_no = l.rpt_no
       ) as "USERNAME"
from   prod_table tbl;

select tbl.table_name,
       l.username
from   prod_table tbl
       inner join (select rpt_no,
                          min(column_name) keep (dense_rank first order by tstamp asc) username
                   from   log_table_b l
                   group by rpt_no)
         on (tbl.assignment_no = l.rpt_no);

N.B。未经测试