我正在尝试在两个字段上写CONNECT BY PRIOR
。有任何想法吗?
最终我想要一些像下面这样的东西。不幸的是它似乎无法正常工作
SELECT *
FROM emp
CONNECT BY PRIOR emp.type = emp.parenttype AND emp.ID = emp.ParentID
创建表脚本:
CREATE TABLE emp (
ConnectionPkID NVARCHAR2(16) Not Null,
EmpType NVARCHAR2(2) Not Null,
EmpID NVARCHAR2(20) Not Null,
ParentID NVARCHAR2(20) Not Null,
ParentType NVARCHAR2(2) Not Null, );
答案 0 :(得分:2)
PRIOR
是条件的一部分,而不是CONNECT BY
子句的一部分。您需要使用它限定每个父字段。试试这个:
SELECT *
FROM emp
CONNECT BY PRIOR emp.type = emp.parenttype AND PRIOR emp.ID = emp.ParentID
START WITH emp.ID = ??? AND emp.type = ???
答案 1 :(得分:1)
鉴于此测试数据:
SQL> select * from t23
2 /
ID TYP PARENT_ID PAR NAME
---------- --- ---------- --- --------------------
1 P Fox in Socks
2 P The Lorax
1 C 1 P Mr Knox
2 C 1 P Daisy-Headed Maisie
3 C 2 P Mr KnoHortonx
SQL>
此版本的查询有效:
SQL> select level, t23.*
from t23
connect by prior t23.id = t23.parent_id
and prior t23.type = t23.parent_type
start with t23.parent_id is null and t23.parent_type is null
/
2 3 4 5 6
LEVEL ID TYP PARENT_ID PAR NAME
---------- ---------- --- ---------- --- --------------------
1 1 P Fox in Socks
2 1 C 1 P Mr Knox
2 2 C 1 P Daisy-Headed Maisie
1 2 P The Lorax
2 3 C 2 P Mr KnoHortonx
SQL>
重要的一点是使用PRIOR标记CONNECT BY子句中的每个操作数。