我有一个看起来像以下列的表: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 调优顾问说使用“不存在”代替“不存在”,但我得到 ORA-00920:无效的关系运算符 00920。00000 -“无效的关系运算符”..
感谢您提供的任何帮助。