"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;
数据库中的行是:
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;