ORACLE: ORA-00904:: неверный идентификатор - PullRequest
0 голосов
/ 21 сентября 2011

Я создал следующие select:

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 в подзапросе?

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Я не знаю, достаточно ли быстро это решение для ваших нужд, но оно должно работать как запланировано. Также я согласен с Олли по поводу дополнительного поля "date_to". Это облегчит жизнь.

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 голос
/ 21 сентября 2011

Вы не можете, но вы можете переместить соединение во внешний подзапрос.Не уверен, что с аналитической функцией это работает хорошо.

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
...