Ich versuche, rekursiv einige Daten mithilfe von connect by, die für jede Zeile muss ich wissen, ob in einem anderen Baum enthält ein bestimmtes Element.Zugriff Eltern Alias in Unterabfrage innerhalb einer With-Klausel mit Verbindung durch in Oracle
So habe ich diese [abgespeckte] query:
select m.id, m.name,
(select (
with recursiveMetaClass as (
select mb.name
from meta mb
start with mb.id = m.id
connect by prior mb.metaclass = mb.id and mb.metaclass <> mb.id
) select name from recursiveMetaClass where name in ('config_group', 'config_item')
) from dual) as basetype
from meta m
inner join meta_rel mr on mr.rel2 = m.id
start with m.name = 'store_sys'
connect by prior m.id = mr.rel1
order siblings by item_order;
Dieser Fehler allerdings mit ORA-00904 "M" "ID". Ungültiger Kennung auf m.id in Anfang mit in meiner verschachtelten Abfrage. Wenn ich durch Abfrage mit ersetzen:
select m.id, m.name,
(select (
with recursiveMetaClass as (
select mb.name
from meta mb
start with mb.id = 1004
connect by prior mb.metaclass = mb.id and mb.metaclass <> mb.id
) select name from recursiveMetaClass where name in ('config_group', 'config_item')
) from dual) as basetype
from meta m
inner join meta_rel mr on mr.rel2 = m.id
start with m.name = 'store_sys'
connect by prior m.id = mr.rel1
order siblings by item_order;
Es funktioniert (gibt nur falsche Ergebnisse).
Wie kann ich entweder m.id in diesen Anfang mit, oder Refactoring dies zu arbeiten? Ich habe auch versucht, einige geschachtelte Selects zu verwenden und eine where-on-rownumber = 1-Reihenfolge nach Level-DESC zu machen, allerdings bekomme ich genau den gleichen Fehler, wenn ich versuche, auf m.id zu referenzieren.
Vielen Dank!
Oracle9i Veröffentlichung 9.2.0.7.0 - 64-Bit-Produktion – Craig
Ich bin nicht wirklich ein Experte auf diesem, aber was passiert, wenn Sie die nicht-Aliasing-Version zu verwenden versuchen? 'start with mb.id = meta.id' –
Die nicht abgespeckte Version hat mehrere Joins zu meta, so dass dies nicht funktioniert. – Craig