--  想要达到的结果  取EZOFFICE.wf_proceedActivity的wf_proceedactivity_id列最新的一段数值合并到EZOFFICE.wf_transition表合符条件的结果集中.
select ezoffice.hibernate_sequence.nextval,r.transitionFrom, r.transitionName,r.transitionTo,r.transitionDescription,b.wf_proceedactivity_id,0,r.expression,nvl(r.defaultactivity,0)
      from EZOFFICE.wf_transition r,
         (select a.wf_activity_id,a.wf_proceedactivity_id,a.wf_workflowprocess_id,a.employee_id,
                  row_number() over(partition by wf_activity_id, wf_workflowprocess_id, employee_id order by wf_proceedactivity_id desc) rn
             from EZOFFICE.wf_proceedActivity a) b
     where  r.transitionfrom in (select act.wf_activity_id from ezoffice.wf_activity act where act.wf_workflowprocess_id = 32226)
       and b.rn = 1;--EZOFFICE.wf_proceedActivity表和EZOFFICE.wf_transition中没有可以匹配相等的列.select a.wf_activity_id,a.wf_proceedactivity_id,a.wf_workflowprocess_id,a.employee_id,
                  row_number() over(partition by wf_activity_id, wf_workflowprocess_id, employee_id order by wf_proceedactivity_id desc) rn
             from EZOFFICE.wf_proceedActivity a--这段查询出的结果是13列.select ezoffice.hibernate_sequence.nextval,r.transitionFrom, r.transitionName,r.transitionTo,r.transitionDescription,r.expression,nvl(r.defaultactivity,0)
      from EZOFFICE.wf_transition r where  r.transitionfrom in (select act.wf_activity_id from ezoffice.wf_activity act where act.wf_workflowprocess_id = 32226);--这段查询出的结果也是13行.
--但是和在一起查出的是169行,被笛卡尔乘积了.--  是不是要改成视图,若是不用视图,该怎么改,请各位高人指教.

解决方案 »

  1.   

    加上where条件,不然当然产生笛卡尔乘积啦
      

  2.   

    简单的说就是
    1表有a b c列   2表有 d e f g怎么把d从2中取出放到1中   a d c d e f g 都是不相等的列.
      

  3.   

    加上a,b表的关联条件阿。比如 a.xx=b.xx
      

  4.   


    产生的结果是这样的,d列的每一行都和1表中的数据乘了一边  即,d中每个相等的值都有N(N=1表的行数)个
      

  5.   

    SELECT *
      FROM ((SELECT A.*, ROWNUM AR FROM WF_PROCEEDACTIVITY A) X,
            (SELECT B.*, ROWNUM BR FROM WF_TRANSITION B) Y)
     WHERE X.AR = Y.BR;
      

  6.   

    1: 用连接: A.XXX = B.XXX
    2: 用GROUP BY + MAX()
      

  7.   

     select * from ((select r.* , ROWNUM AR from EZOFFICE.wf_transition r) x,(select b.* , ROWNUM BR from EZOFFICE.wf_proceedActivity b) y) where x.ar=y.br; 提示 EZOFFICE.wf_transition r) x,(select b.* X的后面缺失括号..
      

  8.   

    SELECT *
      FROM ((SELECT A.*, ROWNUM AR FROM WF_PROCEEDACTIVITY A) X,
            (SELECT B.*, ROWNUM BR FROM WF_TRANSITION B) Y)
     WHERE X.AR = Y.BR;用这段也是一样, X后面缺失右括号.
      

  9.   

    -- TRY IT ..
    SELECT * 
      FROM (SELECT A.*, ROWNUM AR FROM WF_PROCEEDACTIVITY A) X, 
           (SELECT B.*, ROWNUM BR FROM WF_TRANSITION B) Y
    WHERE X.AR = Y.BR; 
      

  10.   

    SELECT *
      FROM (SELECT A.*, ROWNUM AR FROM WF_PROCEEDACTIVITY A) X,
            (SELECT B.*, ROWNUM BR FROM WF_TRANSITION B) Y
    WHERE X.AR = Y.BR; 
      

  11.   

    如果用group by + max()  该怎么写?