首页 > 解决方案 > 如何在不使用存在的情况下重写此 sql 脚本

问题描述

我是 sql 新手。如何在不使用存在的情况下重写以下脚本

select
  distinct oe.*,
  o.*,
  so.*,
  ro.*
from
  ms_bvoip_order_extension oe
  inner join ms_order o on oe.ms_order_id = o.ms_order_id
  inner join ms_sub_order so on so.ms_order_id = o.ms_order_id
  inner join ms_job j on j.entity_id = so.ms_sub_order_id
  inner join ms_task t on t.wf_job_id = j.wf_job_id
where
  o.order_type = 900
  and o.entered_date between to_date('12/01/2018 00:00:00', 'mm/dd/yyyy hh24:mi:ss')
  and to_date('12/31/2018 00:00:00', 'mm/dd/yyyy hh24:mi:ss')
  and j.entity_type = 5
  and exists (
    select
      'X'
    from
      ms_task t
    where
      (
        (t.name like '%Error%')
        or (t.name like '%Correct%')
        or (t.name = '%Create AOTS Ticket%')
      )
      and t.job_id = hextoraw(j.wf_job_id)
  )
order by
  o.usrp_order_number;

标签: mysqlsql

解决方案


正如 Jerry 提到的,您可以使用 EXISTS,但如果您不想这样做,您可以加入相同的 EXISTS 子查询:

INNER JOIN (
    SELECT DISTINCT hextoraw(j.wf_job_id) JOB_ID 
    FROM ms_task 
    WHERE t.name like '%Error%' 
        or t.name like '%Correct%' 
        or t.name like '%Create AOTS Ticket%'
    ) TASK ON t.job_id = TASK.JOB_ID

您可能可以删除您的其他 ms_task 表并 JOIN ON j.wf_job_id......


推荐阅读