Я создал следующую таблицу, чтобы понимать рекурсивные запросы:
Для этого я сделал вставку, чтобы вызвать al oop в запрос, и теперь моя таблица выглядит следующим образом (добавлено соединение Афины-Вена):
Теперь, чтобы сделать нециклический рекурсивный запрос, я использовал функцию connect by и написал следующий код:
select distinct abflug,ankunft,level from flugverbindungen
start with ABFLUG = 'Wien'
connect by nocycle prior ankunft = abflug
order by level;
Получился результат:
Я вижу, что запрос выполнялся до Вены и только что закончился в Прессбурге. Но когда я меняю предыдущее выражение с ankunft на abflug следующим образом:
select distinct abflug,ankunft,level from flugverbindungen
start with ABFLUG = 'Wien'
connect by nocycle ankunft = prior abflug
order by level;
, я получаю следующий результат:
Теперь Афины - Вена имеют уровень 2, что очень странно, потому что узел root должен быть Веной, а не Афинами. Я также не понимаю, как Laibach to Belgrade стал четвертым уровнем.
В заключение я действительно не понимаю, что предшествующее выражение меняет в запросе и для чего оно годится. Я был бы очень признателен, если бы вы объяснили предыдущее выражение этим примером. Что на самом деле меняется, когда я меняю местами предыдущее выражение?