查询的外连接解决方​​案

时间:2018-02-05 14:19:50

标签: sql oracle join

如何在最佳时间内检索这些行?

一个表名为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);

如果我们可以使用外连接或类似技术编写更好的查询,请告诉我。

1 个答案:

答案 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 );