次の列のようなテーブルがあります: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-「無効な関係演算子」。
提供された助けに感謝します。