0

我有这样一个查询:

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

但在这种情况下,我不允许选择多行。我应该怎么办?

4

2 回答 2

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
于 2012-10-05T11:36:10.223 回答
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
于 2012-10-05T11:37:28.147 回答