如何在最佳时间内检索这些行?
一个表名为TJOBSTATUS,它有一个JOB_ID和JOB_STATUS。 另一个表名为TJOB_DETAIL,它有JOB_ID作为外键和JOB_TYPEID以及其他列。
我想检索所有不包含JOB_TYPEID但在表TJOBSTATUS中处于失败状态的行。
示例: - TJOBSTATUS的行=
JOB_ID JOB_STATUS
1 F
2 P
3 F
4 P
5 P
TJOB_DETAIL的行: -
JOB_ID JOB_TYPEID
1 28
1 12
1 14
2 12
2 14
3 13
3 15
4 28
5 25
5 26
这里我想显示JOB_ID 3,因为它失败并且它不包含JOB_TYPEID 28
我写了一个非常慢的查询,例如: -
SELECT TJ.JOB_ID
FROM TJOBSTATUS TJ
WHERE TJ.JOB_STATUS='F'
AND TJ.JOB_ID NOT IN (SELECT TJD.JOB_ID
FROM TJOB_DETAIL TJD
WHERE (TJD.JOB_TYPEID=28)
AND TJD.JOBDATE > SYSDATE - 7);
如果我们可以使用外连接或类似技术编写更好的查询,请告诉我。
答案 0 :(得分:0)
如果没有其他信息(执行计划,索引等),性能问题很难回答。无论如何,你可以尝试not exists
版本。
<强> demo 强>
select job_id
from tjobstatus tj
where job_status = 'F'
and not exists (
select 1 from tjob_detail
where job_id = tj.job_id and job_typeid = 28 );