"OR" CONNECT BY PRIOR 中的运算符

"OR" operator in CONNECT BY PRIOR

数据库中的行是:

DATAID OWNERID PARENTID
111    123     133
976    346     111
987    976     657

我想显示所有这些行,但是使用以下查询只显示前 2 行,我需要所有 3 行:

SELECT * FROM DTREE  start with DATAID=111
connect by prior dataid=parentid OR dataid=ownerid;

似乎 运行 只是 dataid=parentid 部分而不是第二部分。

您缺少应用于第二次出现的 DATAID 的 PRIOR 运算符:

SELECT * FROM DTREE  start with DATAID=111
connect by prior dataid=parentid OR   prior  /* <-- MISSING!!! */  dataid=ownerid;

或者:

connect by prior dataid in (parented, ownerid);

要防止循环,您应该使用 NOCYCLE 子句

SELECT * FROM DTREE  start with DATAID=111
connect by prior nocycle dataid=parentid OR prior dataid=ownerid;