У меня есть иерархический запрос, который возвращает ту же строку (по ROWID) несколько раз:Странное поведение иерархического запроса
select
rowid, regexp_substr(col, '[^; ]+', 1, level) data, level
from
(select * from table1 where rowid in ('rowid1', 'rowid2'))
connect by
regexp_substr(col, '[^; ]+', 1, level) is not null
Этот запрос возвращает следующий результат (выдержка):
rowid data level
AADAxrADkAACic5AAA val1 1
AADAxrADkAACic5AAA val2 2
AADAxrADkAACic5AAA val3 3
AADAxrADkAACic5AAA val4 4
AADAxrADkAACic5AAA val5 5
AADAxrADkAACic5AAA val6 6
Как это может Случается, что одна и та же строка является родительской и дочерней?
Кроме того, если я хочу, чтобы ограничить по ROWID, которые дети, которые я хочу получить:
connect by regexp_substr(col, '[^; ]+', 1, level) is not null and prior rowid = rowid
Oracle говорит мне, что у меня есть цикл в моих данных? Это кажется разумным, потому что у меня есть строка с той же самой строкой, что и родитель и ребенок, но как она работала в предыдущем случае (без and prior rowid = rowid
)?
Каковы исходные данные, которые вы запрашиваете? –