2014-11-18 5 views
1

Пожалуйста, взгляните на запрос ниже - я получаю недопустимый идентификатор t1.oid в нижнем внутреннем запросе.Область псевдонима имени таблицы в запросе подвыбора

У меня есть столбец oid в iclr_request t1

select t1.requestNo 
    , t2.routeDistance, 
    , ( 
     select WM_CONCAT(crc7) as "TravCirc7s" 
      from (
        select (
          select crc7 
          from dim_afi_dnld_stn_v1 
          where stn_sys_nbr = t3.stn_sys_nbr 
           and rownum=1 
         ) as crc7 
        from iclr_trav_circ7 t3 
        where request_oid = **t1.oid** 
        and sub_route_index=0 
        and station_type_oid = 1 
        order by sequence 
       ) 
     ) 
    from iclr_request t1 
    , iclr_summary_results t2 
where t1.oid = t2.request_oid 
+0

Это работает? выберите oid из iclr_request – Christian

+0

Да, он отлично работает. Я могу выбрать oid из таблицы iclr_request, но не могу использовать t1.oid внутри оператора выбора innner – user3425746

+3

Oracle ограничивает разрешение псевдонима таблиц на один уровень. Обычно вы можете найти другой способ написать такой запрос. –

ответ

2

Вы можете попробовать это:

select t1.requestNo , t2.routeDistance, 
     WM_CONCAT((select crc7 from dim_afi_dnld_stn_v1 where stn_sys_nbr = t3.stn_sys_nbr and rownum=1)) as "TravCirc7s" 
from iclr_request t1 
     join iclr_summary_results t2 on t1.oid = t2.request_oid 
     left join iclr_trav_circ7 t3 on t3.request_oid = t1.oid 
             and t3.sub_route_index=0 
             and t3.station_type_oid = 1 
group by t1.requestNo , t2.routeDistance; 

коррелированных подзапросы могут направлять свои родитель только один уровень выше (хотя некоторые документы Oracle говорят, что неограниченный)

EDIT: Он не сохраняет порядок по последовательности в W M_CONCAT. Возможно, вам придется обернуть его родительским запросом, а затем wm_concat

Смежные вопросы