2017-05-23 45 views
0

在數據庫中的行是:「OR」運算符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部分而不是第二個部分。

+0

的'DATAID'值'987'不通過連接到任何其它行父母或所有者ID。你期望在這裏輸出什麼? –

+0

976的DATAID值應該被認爲是正確的?之後,因爲第3行的ownerid是976(dataid = ownerid),所以它應該顯示? – ghostrider

+0

'只有最上面的2行被顯示出來......這就是我所期望的。 –

回答

1

你缺少施加到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);