0

我想知道如何重构这个脚本,因为两个嵌套查询非常相似(我的数据库使用 ORACLE):

  UPDATE
  ALERT alert
  SET
    VERIFICATION_COUNT =
      (
        SELECT COUNT(*)
        FROM TRANSCRIPTION trans
        INNER JOIN DOS dos
        ON trans.REF_NO = dos.REF_NO
        WHERE trans.STATUS = 'ONGOING'
        AND alert.VISIT = dos.VISIT
      )
  WHERE
      alert.VISIT = 
      (
        SELECT DISTINCT dos.VISIT FROM TRANSCRIPTION trans
        INNER JOIN DOS dos
        ON trans.REF_NO = dos.REF_NO
        WHERE trans.STATUS = 'ONGOING'
        AND alert.VISIT = dos.VISIT
      );
4

1 回答 1

0

尝试这个:

merge into alert A
using (
    select D.visit, count(*) as visit_count
    from transcription T
        join dos D on D.ref_no = T.ref_no
    where T.status = 'ONGOING'
    group by D.visit
) X
on ( A.visit = X.visit )
when matched then
    update
    set A.verification_count = X.visit_count
;

不过,我不保证它完全符合原版的功能。:-) 那是因为在不知道外键关系的情况下,我对原始 WHERE 子句的作用有点困惑,因为相等运算符用于结果集,而不是标量子查询。

于 2014-06-04T11:14:08.087 回答