我有2个表 - 表A包含一个生效日期的员工列表,另一个表B包含员工参考详细信息。
我要做的是根据Emp_ID筛选出有效的员工列表 - 有效的定义是Emp_status是A(有效),而该员工的特定日期(当前日期)属于Effective_start和结束日期。
表A有大约800条记录,表B大约有2000条记录。我应该如何通过SQL查询执行此操作以使其高效?
我正在考虑从表B中筛选出有效的EMP_ID列表(~500条记录),然后根据EMP_ID和当前日期与表A连接,看它是否属于有效期。但是,这意味着要比较表A的2000条记录中的每500条记录,表A预计将来会增长。
有关解决此问题的任何建议吗?
答案 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'
);