Oracle SQL - 根据员工列表的有效日期检查状态

时间:2015-12-15 16:36:26

标签: sql oracle plsql

我有2个表 - 表A包含一个生效日期的员工列表,另一个表B包含员工参考详细信息。

  • 表A-1)Emp_ID,2)Effective_Start,3)Effective_End
  • 表B-1)Emp_ID,2)Emp_status

我要做的是根据Emp_ID筛选出有效的员工列表 - 有效的定义是Emp_status是A(有效),而该员工的特定日期(当前日期)属于Effective_start和结束日期。

表A有大约800条记录,表B大约有2000条记录。我应该如何通过SQL查询执行此操作以使其高效?

我正在考虑从表B中筛选出有效的EMP_ID列表(~500条记录),然后根据EMP_ID和当前日期与表A连接,看它是否属于有效期。但是,这意味着要比较表A的2000条记录中的每500条记录,表A预计将来会增长。

有关解决此问题的任何建议吗?

1 个答案:

答案 0 :(得分:2)

您可以加入这两个表,并省略不符合各个表中条件的列。 与表A类似 - 省略当前日期不适合开始日期和结束日期的表格,对于表格B - 省略其Emp_Status不在A(活动)

中的日期
SELECT t1.Emp_ID , t1.Effective_Start, t1.Effective_End,
       t2.Emp_Status
       FROM table1 t1
       JOIN table2 t2 ON t1.Emp_ID = t2.Emp_ID 
       WHERE ( 
             CURDATE( ) BETWEEN t1.Effective_Start AND t1.Effective_End )
             AND t2.Emp_Status = 'A' 
             );