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
的情况下将这两个查询合并到一个查询中答案 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
,因此我使用了正确的关键字。 a
和b
未加入,因为在下一个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。