2012-07-29 103 views
1
SELECT ppse.SUBORDINATE_POSITION_ID child_position_id 
       ,ppse.PARENT_POSITION_ID manger_position_id 
       ,b.person_id 
FROM per_pos_structure_elements_v ppse 
     ,APPS.xxkpc_hr_personnel_v2_mv b 
WHERE b.position_id(+) = ppse.SUBORDINATE_POSITION_ID 

AND ppse.POS_STRUCTURE_VERSION_ID =64 
AND ppse.PARENT_POSITION_ID=12493 

输出此查询:SQL层次查询

12604 12493 400 
12605 12493 108 
13644 12493 37897 
12752 12493 18 
13643 12493  
13642 12493  
13641 12493  



SELECT ppse.SUBORDINATE_POSITION_ID child_position_id 
       ,ppse.PARENT_POSITION_ID manger_position_id 
       ,b.person_id 
FROM per_pos_structure_elements_v ppse 
       ,APPS.xxkpc_hr_personnel_v2_mv b 
WHERE b.position_id(+) = ppse.SUBORDINATE_POSITION_ID 

AND ppse.POS_STRUCTURE_VERSION_ID =64 
AND ppse.PARENT_POSITION_ID=12504 


12514 12504 449 
12483 12504 450 
12487 12504 456 
12497 12504 156 
12889 12504 168 
12493 12504 

12493是第一个查询父母是孩子的第2个查询,所以我需要删除具有空为person_id(第三列)中的所有行&没有父对于孩子的在第二查询堂妹,他是孩子的在第一个查询,但在第一次查询

+0

@marc_s Oracle DB 11g – 2012-07-29 08:05:49

回答

0

尝试这样的事情,除去最后3行父我不能删除最后一排...

SELECT ppse.SUBORDINATE_POSITION_ID child_position_id 
      ,ppse.PARENT_POSITION_ID manger_position_id 
      ,b.person_id 
FROM per_pos_structure_elements_v ppse 
    ,APPS.xxkpc_hr_personnel_v2_mv b 
WHERE b.position_id(+) = ppse.SUBORDINATE_POSITION_ID 
AND b.type(+) = 'KPC Employee' 
AND ppse.POS_STRUCTURE_VERSION_ID =64 
AND ppse.PARENT_POSITION_ID=12493 
AND 
(b.person_id!=null OR 
ppse.SUBORDINATE_POSITION_ID in 
      (SELECT SUBORDINATE_POSITION_ID from per_pos_structure_elements_v)) 
+0

它不与PARENT_POSITION_ID = 12504一起使用,它将删除12493的行,该行是子级的父级 – 2012-07-29 08:29:36

+0

尝试从最后一条语句中删除NOT。显示如下... ppse.SUBORDINATE_POSITION_ID in (从per_pos_structure_elements_v中选择SUBORDINATE_POSITION_ID)) – 2012-07-29 08:37:02