2012-10-05 8 views
0

場我有這樣一個查詢:無法ADRESS在嵌套查詢

select d.r_object_id, 

    (select max(max_date) from (

     SELECT max(sys_s.r_modify_date) AS max_date 
     FROM kc_mission_s mis_s, dm_sysobject_s sys_s 
     WHERE mis_s.r_object_id = sys_s.r_object_id AND mis_s.ka_document = d.r_object_id 

     union all 

     SELECT sys_s.r_modify_date AS max_date 
     FROM dm_document_s doc_s left join dm_sysobject_s sys_s on doc_s.r_object_id = sys_s.r_object_id 
     WHERE doc_s.r_object_id = d.r_object_id 

    )) as maxx 

from kc_document_s d 

領域d.r_object_id是不是從過去的嵌套查詢可見。 這將是可見的,如果在兩者之間查詢將這樣被刪除:

select d.r_object_id, 

    (
     SELECT max(sys_s.r_modify_date) AS max_date 
     FROM kc_mission_s mis_s, dm_sysobject_s sys_s 
     WHERE mis_s.r_object_id = sys_s.r_object_id AND mis_s.ka_document = d.r_object_id 

     union all 

     SELECT sys_s.r_modify_date AS max_date 
     FROM dm_document_s doc_s left join dm_sysobject_s sys_s on doc_s.r_object_id = sys_s.r_object_id 
     WHERE doc_s.r_object_id = d.r_object_id 

    ) as maxx 

from kc_document_s d 

但在這種情況下,我不能選擇多行。 我該怎麼辦?

回答

0

如果繼續從中間級查詢到的最低水平查詢加盟,還包括在每個級別的聯接列,那麼它應該工作

select d.r_object_id, 
    (select max(max_date) from (
     SELECT max(sys_s.r_modify_date) AS max_date, 
     d.r_object_id 
     FROM kc_mission_s mis_s, dm_sysobject_s sys_s 
     WHERE mis_s.r_object_id = sys_s.r_object_id AND mis_s.ka_document = d.r_object_id 

     union all 

     SELECT sys_s.r_modify_date AS max_date, 
     d.r_object_id 
     FROM dm_document_s doc_s left join dm_sysobject_s sys_s on doc_s.r_object_id = sys_s.r_object_id 
     WHERE doc_s.r_object_id = d.r_object_id 
    ) sub_query 
     where sub_query.r_object_id = d.r_object_id 
    ) as maxx 
from kc_document_s d 
0

試試這個

select d.r_object_id, 
     greatest((select max(sys_s.r_modify_date) as max_date 
      from kc_mission_s mis_s, dm_sysobject_s sys_s 
     where mis_s.r_object_id = sys_s.r_object_id 
      and mis_s.ka_document = d.r_object_id), 
     (select sys_s.r_modify_date as max_date 
      from dm_document_s doc_s 
      left join dm_sysobject_s sys_s 
      on doc_s.r_object_id = sys_s.r_object_id 
     where doc_s.r_object_id = d.r_object_id) 
     ) as maxx 
    from kc_document_s d