如何在不使用union的情况下将这两个查询合并为一个查询

时间:2012-06-05 17:50:53

标签: sql oracle

SELECT b.KPCNO
         ,b.KPC_FULL_NAME    

FROM xxkpc_hr_personnel_v2  b
WHERE  b.type(+) = 'KPC Employee'
       AND b.DESIGNATION is null
       AND b.kpcno IS NOT NULL
       AND b.ORGANIZATION_ID=(select g.ORGANIZATION_ID from  xxkpc_fn_web_personnel_v g where g.kpcno = :kpcno)
GROUP BY b.KPCNO
          ,b.kpc_full_name

UNION

SELECT b.KPCNO
         ,b.KPC_FULL_NAME
FROM xxkpc_hr_pos_struct_code_comb   a
     ,xxkpc_hr_personnel_v2  b
WHERE b.position_id(+) = a.child_position_id
       AND b.type(+) = 'KPC Employee'
       AND b.kpcno IS NOT NULL
       AND a.PERANT_POSITION_ID =  (select g.POSITION_ID from  xxkpc_fn_web_personnel_v g where g.kpcno = :kpcno)
GROUP BY b.KPCNO
          ,b.kpc_full_name

请在不使用UNION

的情况下将这两个查询合并到一个查询中

3 个答案:

答案 0 :(得分:2)

我认为你可以这样写:

select distinct b.kpcno, b.kpc_full_name
  from xxxkpc_hr_personnel_v2 b
 where b.type(+) = 'KPC Employee'
   and b.kpcno is not null
   and (
         (b.designation is null and
          b.organization_id in (select g.organization_id
                                  from xxkpc_fn_web_personnel_v g 
                                 where g.kpcno = :kpcno))
         or
        (b.position_id in (select a.child_position_id
                             from xxkpc_hr_pos_struct_code_comb a
                            where a.parent_position_id = (select g.position_id
                                                            from xxkpc_fn_web_personnel_v g 
                                                           where g.kpcno = :kpcno)))
       )

据我所知,您使用group by制作结果distinct,因此我使用了正确的关键字。 ab未加入,因为在下一个and ed子句中您要说a.parent_position_id = ....

答案 1 :(得分:1)

SELECT 
    b.KPCNO,
    b.KPC_FULL_NAME
FROM 
    xxkpc_hr_personnel_v2 b
        LEFT OUTER JOIN xxkpc_hr_pos_struct_code_comb a ON b.position_id = a.child_position_id
        INNER JOIN xxkpc_fn_web_personnel_v g ON g.kpcno = :kpcno
WHERE  
    b.type = 'KPC Employee'
AND b.kpcno IS NOT NULL
AND ((b.DESIGNATION IS NULL AND g.ORGANIZATION_ID = b.ORGANIZATION_ID) 
    OR (a.PERANT_POSITION_ID = g.POSITION_ID))

答案 2 :(得分:0)

你有两张桌子join吗?看起来您可以加入b.KPCNO或b.KPC_FULL_NAME。