0

Per_all_people_f

name  person_id  emp_flag  effective_start_date   effective_end_date   DOJ
--------------------------------------------------------------------------------    
ABC   123          Y       30-MAR-2011              30-MAR-2013       10-FEB-2011
ABC   123          Y       24-FEB-2011              27-FEB-2011       10-FEB-2011
DEF   345          N       10-APR-2012              30-DEC-4712       15-SEP-2011

per_chcklist

 person_id   name
  ------------------   
123         C1
456         C2 
345         C3 

ACTUAL_TERMINATION_DATE

person_id   TERM_DATE
      ------------------   
    123         30-SEP-2013
    456         30-AUG-2013
    345         29-AUG-2013

今、Per_all_people_f にあり、TERM_DATE が ACTUAL_TERMINATION_DATE にあるが per_chcklist にはないすべての個人 ID を計算したいと考えています。

クエリに存在しない単純なものを使用したい。私が書いたクエリは:-

select papf.person_id,
papf.name
from per_all_people_f papf,
per_chcklist pc,
ACTUAL_TERMINATION_DATE atd

where papf.person_id=atd.person_id
and atd.TERM_DATE is not null
and pc.person_is!=papf.person_id;

しかし、これは私に答えを与えていません。

4

1 に答える 1

0

I might suggest that you write this query using exists and not exists. It more closely matches your requirements:

select papf.person_id, papf.name
from per_all_people_f papf
where exists (select 1
              from ACTUAL_TERMINATION_DATE atd
              where atd.TERM_DATE = papf.TERM_DATE and atd.person_id = papf.person_id
             ) and
      not exists (select 1
                  from per_chcklist pc
                  where papf.person_id = pc.person_id
                 );

After you have this work, you can figure out how to express this as explicit joins, if you want to learn more about joins.

于 2013-08-30T18:05:53.017 に答える