Язык запросов SQL

Экономия времени с помощью рекурсивного запроса



Экономия времени с помощью рекурсивного запроса

Получить нужную информацию будет проще, если создать единственный рекурсивный запрос, который сделает всю работу за одну операцию. Вот его синтаксис:

WITH RECURSIVE

ReachableFrom (Source, Destination)

        AS (SELECT Source, Destination

                FROM FLIGHT

            UNION

            SELECT in.Source, out.Destination

                FROM ReachableFrom in, FLIGHT out

                WHERE in.Destination = out.Source

             )

    SELECT * FROM ReachableFrom

    WHERE Source = "Portland";

В начале первого прохода, выполняемого во время рекурсии, в таблице FLIGHT будет семь строк, а в ReachableFrom (означает "можно попасть из") — ни одной. Оператор UNION берет семь строк из FLIGHT и копирует их в таблицу ReachableFrom. Тогда в ReachableFrom появятся данные, показанные в табл. 12.2.



Содержание раздела