用 3 个子查询编写 oracle sql,但是会导致超时问题。希望获得技术帮助以解决问题。这是我的查询:
select DISTINCT E_reg.applicant_id,
E_REG.L_NAME,
E_REG.F_NAME,
E_REG.B_DATE,
E_REG.REG_DATE,
from E_REG,TRANSACTION
where E_REG.ID=TRANSACTION.PAR_ID
and TRANSACTION.BEGIN_DATE BETWEEN to_date ('01-APR-2012')AND to_date('30-JUN- 2012')
and e_reg.applicant_id NOT IN
(select applicant_id
from w_reg
where reg_date <'01-JUL-2012'
and exit_date is NULL or exit_date >='01-APR-2012'
or e_reg.applicant_id NOT IN
(select applicant_id
from t_reg
where reg_date <'01-JUL-2012'
and exit_date is NULL or exit_date>='01-APR-2012')
or e_reg.applicant_id NOT IN
(select applicant_id
from r_reg
where reg_date <'01-JUL-2012'
and o_attend IS NOT NULL
and term_date is NULL or term_date >='01-APR-2012')
基本上我们有 4 个程序可供您使用(e、w、t 和 r)。这些都是包含基本参与者信息的单独表格。您可能同时在所有 4 个程序中,申请者 ID 将是每个人的关键。
事务表包含您可能在这 3 个或 4 个程序中收到的任何服务,而不是 r 程序,它有自己的事务表。
我想要在 e 表中列出在时间范围内有服务但同时在任何其他程序中没有任何服务的参与者列表。他们只能通过 e 程序获得服务。今天早上它似乎工作了,但是它开始超时并且根本没有运行。我认为它必须是子查询。想知道是否有更好的方法来完成这项工作。