【问题标题】:Alternative to Where Exist clause MySQL替代 Where Exist 子句 MySQL
【发布时间】:2021-04-06 05:58:54
【问题描述】:

我有这个 select 语句需要很长时间才能在更大的数据集上运行

select lookup_svcscat_svcscatnew.SVCSCAT_NEW_DESC as svc_type, 
        enrolid, msclmid, dx1, dx2, dx3, 
        proc1,msk_cpt_mapping.surg_length_cd as SL_CD,
        msk_cpt_mapping.days as day_window,o.svcdate_form, pay,
        table_label
from ccaeo190_ky o
    left join lookup_svcscat_svcscatnew on o.svcscat = lookup_svcscat_svcscatnew.svcscat
    left join msk_cpt_mapping on o.proc1 = msk_cpt_mapping.cpt_code
where EXISTS 
        (
        select 1 
        from eoc_op_mapping e
        where e.msclmid = o.msclmid
            and e.enrolid = o.enrolid
            and proc1 =27447
        )
ORDER BY svcdate_form, msclmid;

我想返回我的 ccaeo190_ky 表中满足表 eoc_op_mapping 的 where EXISTS 子句要求的任何行。有没有办法使用连接或选择语句来实现这些结果?

我在想这样的事情:

select lookup_svcscat_svcscatnew.SVCSCAT_NEW_DESC as svc_type, 
        o.enrolid, o.msclmid, dx1, dx2, dx3, 
        proc1,msk_cpt_mapping.surg_length_cd as SL_CD,
        msk_cpt_mapping.days as day_window,o.svcdate_form, pay,
        table_label
from ccaeo190_ky o
    left join lookup_svcscat_svcscatnew on o.svcscat = lookup_svcscat_svcscatnew.svcscat
    left join msk_cpt_mapping on o.proc1 = msk_cpt_mapping.cpt_code
    inner join
        (select msclmid, SUM(IF(proc1 = 27447,1,0)) AS cpt 
        from eoc_op_mapping 
        group by enrolid
        HAVING cpt > 0) e 
on e.enrolid = o.enrolid
group by o.enrolid;

但我不知道这是否是正确的方向

【问题讨论】:

    标签: mysql select where-clause exists


    【解决方案1】:

    通常EXISTS 的性能优于连接。

    如果你想尝试加入,这相当于你的WHERE EXISTS

    .......................................................
    inner join (
      select distinct msclmid, enrolid
      from eoc_op_mapping
      where proc1 = 27447
    ) e on e.msclmid = o.msclmid and e.enrolid = o.enrolid
    .......................................................
    

    如果eoc_op_mapping 中没有重复的msclmid, enrolid 组合,您可以删除distinct

    【讨论】:

    • 太棒了,非常感谢!由于某种原因,内部连接在几秒钟内返回了我的结果,而 WHERE Exists 已经运行了大约 24 小时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    相关资源
    最近更新 更多