Я создал следующую таблицу, чтобы понимать рекурсивные запросы:
![enter image description here](https://i.stack.imgur.com/r3Tb9.png)
![enter image description here](https://i.stack.imgur.com/RGmAb.png)
Для этого я сделал вставку, чтобы вызвать al oop в запрос, и теперь моя таблица выглядит следующим образом (добавлено соединение Афины-Вена):
![enter image description here](https://i.stack.imgur.com/wGoFg.png)
Теперь, чтобы сделать нециклический рекурсивный запрос, я использовал функцию connect by и написал следующий код:
select distinct abflug,ankunft,level from flugverbindungen
start with ABFLUG = 'Wien'
connect by nocycle prior ankunft = abflug
order by level;
Получился результат:
![enter image description here](https://i.stack.imgur.com/5CFdY.png)
Я вижу, что запрос выполнялся до Вены и только что закончился в Прессбурге. Но когда я меняю предыдущее выражение с ankunft на abflug следующим образом:
select distinct abflug,ankunft,level from flugverbindungen
start with ABFLUG = 'Wien'
connect by nocycle ankunft = prior abflug
order by level;
, я получаю следующий результат:
![enter image description here](https://i.stack.imgur.com/G3TLo.png)
Теперь Афины - Вена имеют уровень 2, что очень странно, потому что узел root должен быть Веной, а не Афинами. Я также не понимаю, как Laibach to Belgrade стал четвертым уровнем.
В заключение я действительно не понимаю, что предшествующее выражение меняет в запросе и для чего оно годится. Я был бы очень признателен, если бы вы объяснили предыдущее выражение этим примером. Что на самом деле меняется, когда я меняю местами предыдущее выражение?