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,
       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 に答える
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 に答える