合并两个查询而不使用union

时间:2014-08-06 14:10:12

标签: sql oracle plsql

我想获取具有

状态的员工
'A-->Active'
L-->Inactive
T-->terminated

此状态已在表lookup_table中定义。对于Active和Inactiev状态,没有其他条件,但是对于终止状态,有一个条件是term_date可以在今天和过去7天之间。如何将这些条件加入到一个查询中。我写的查询是: -

For active active inactive simply :-

select emp_no , full_name
from people_table pt,
lookup_table lt
where lookup_table_type='ASGN'
and pt.assignment_id=lt.code
and lookup_code in ('A','I')

For terminated :-

select emp_no , full_name
from people_table pt,
lookup_table
where lookup_table_type='ASGN'
and lookup_code in ('T')
and term_date between sysdate and sysdate-7
and pt.system_person_type='EX_EMP'

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

2 个答案:

答案 0 :(得分:2)

select emp_no , full_name
from people_table pt,
lookup_table
where lookup_table_type='ASGN'
and (
lookup_code in ('A','I')
or (
and lookup_code in ('T')
and term_date between sysdate and sysdate-7
and pt.system_person_type='EX_EMP' ) )

但我猜你没有向我们展示完整的代码。

答案 1 :(得分:1)

要“合并”,请在您的位置使用OR并获得相同的效果。

像这样:

select emp_no , full_name
from people_table pt,
lookup_table lt on pt.assignment_id=lt.code
where lookup_table_type='ASGN'
  and (
       lookup_code in ('A','I')
       OR
       (lookup_code in ('T')
        and term_date between sysdate and sysdate-7
        and pt.system_person_type='EX_EMP')
      )