ORA-00904嵌套查询的标识符无效

4

我已经被这个错误困扰了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;

它返回以下错误:
ERROR at line 6:
ORA-00904: "TBL"."ASSIGNMENT_NO": invalid identifier

我尝试了很多方法,但似乎没有什么能帮助我。


您不能在内部选择中使用外部表。 - Jens
@Mureinik 对于内部查询,它返回了多行... 这就是为什么它会抛出 ORA-01427: single-row subquery returns more than one row 错误的原因,所以我写了这个 select distinct(FirstItem)... 查询。 - user206168
2个回答

4

你不能在内部子查询中使用父级表。以下是实现此操作的方法:

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


0
问题在于你只能将一个引用从外部查询传递到下一个子查询级别。
以下是几个替代方案:
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);

注意:未经测试


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接