次の列のようなテーブルがあります:bad_mrn、good_mrn、cr_date
insert into mrn_merge values ( '00000001','00000002', '20121120');
insert into mrn_merge values ( '00000002','00000003', '20121120');
insert into mrn_merge values ( '00000003','00000004', '20121120');
だから結局は。
-1が
2にマージされました-2が3に
マージされました-3が4にマージされました
1、2、3、または4の入力パラメーターを指定すると、4を返すクエリが必要です。次のプリペアドステートメントは機能しますが、mrn_mergeテーブルに40kレコードが含まれるようになると時間がかかります。
SELECT *
FROM
   (SELECT good_mrn, LEVEL
    FROM mrn_merge
    WHERE 
        (CONNECT_BY_ROOT bad_mrn =
            (SELECT bad_mrn FROM mrn_merge WHERE LEVEL =
                (SELECT MAX (LEVEL) FROM mrn_merge  START WITH good_mrn = ?
                 CONNECT BY PRIOR bad_mrn = good_mrn )
             START WITH good_mrn = ?
             CONNECT BY PRIOR bad_mrn = good_mrn)
        )  OR ( CONNECT_BY_ROOT bad_mrn = ?)
    START WITH  bad_mrn NOT IN ( SELECT good_mrn FROM mrn_merge  )
    CONNECT BY bad_mrn = PRIOR good_mrn  ORDER BY LEVEL DESC)
WHERE ROWNUM = 1 ;
SQLチューニングアドバイザは、「NOTIN」の代わりに「NOTEXISTS」を使用すると言いますが、ORA-00920:無効な関係演算子00920を取得します。00000-「無効な関係演算子」。
提供された助けに感謝します。