首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORACLE: ORA-00904::无效标识符

ORACLE: ORA-00904::无效标识符
EN

Stack Overflow用户
提问于 2011-09-21 16:06:35
回答 2查看 7.2K关注 0票数 0

我创建了以下select:

代码语言:javascript
复制
select e.first_name, e.last_name, 
   (select jobname_id from 
       (select j.id, j.jobname_id, first_value(j.jobname_id) 
        over (order by j.date_from desc) as current_job 
        from jobs j where j.emp_id=e.emp_id and j.date_from < sysdate) 
    where jobname_id != current_job and rownum=1) as previous_job 
from employees e

但是我得到"ORA-00904:"E"."EMP_ID":无效的标识符“

如何在子查询中使用对E.EMP_ID的引用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-21 18:47:47

我不知道这个解决方案是否足够快来满足您的需求,但它应该按计划工作。此外,我同意奥利关于附加字段"date_to“的看法。这会让事情变得更容易。

代码语言:javascript
复制
select
  e.first_name   as first_name,
  e.last_name    as last_name,
  sub.jobname_id as jobname_id
from 
  employees e,
  (
    select
      j.emp_id     as emp_id,
      j.jobname_id as jobname_id,
      row_number()
        over (
          partition by j.emp_id
          order by     j.date_from desc
        ) as job_order
    from
      jobs j
    where j.date_from < sysdate
  ) sub
where sub.emp_id    = e.emp_id
  and sub.job_order = 2
票数 1
EN

Stack Overflow用户

发布于 2011-09-21 16:29:21

您不能,但您可以将连接移到外部的子查询中。不过,我不确定它是否能很好地用于分析函数。

代码语言:javascript
复制
select e.first_name, e.last_name, 
   (select jobname_id from 
       (select j.emp_id, j.id, j.jobname_id, first_value(j.jobname_id) 
        over (order by j.date_from desc) as current_job 
        from jobs j where j.date_from < sysdate) j
    where j.emp_id=e.emp_id and jobname_id != current_job and rownum=1) as previous_job 
from employees e
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7496485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档