Можно ли вызвать CTE в другом CTE, например, может ли CTE2 использовать результаты CTE1? - PullRequest
0 голосов
/ 12 февраля 2019

Пример: Предположим:

 with CTE1 as (select col1 from t1) select * from CTE1;
    with CTE2 as (select col2 from t2 where col2=col1)
    select * from CTE2;

Возможно ли это.Я пробовал несколько кодов, но ни один из них не используется.Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 12 февраля 2019

CTE существует только в запросе, который его определяет.Ваш второй запрос не знает, что CTE из первого запроса когда-либо существовал.

Вы можете ссылаться на один CTE из другого, если они оба являются частью одного и того же запроса (и определены справа).порядок), так что вы можете сделать что-то вроде:

with CTE1 as (select t1.col1 from t1),
     CTE2 as (select t2.col2 from CTE1 join t2 on t2.col2=CTE1.col1)
select * from CTE2;

Два определения CTE разделены запятой (как в документах ), и порядок имеет значение.В этом довольно надуманном примере вы можете ссылаться на CTE1 из CTE2;но вы не можете ссылаться на CTE2 из CTE1, поскольку он еще не был определен в том, что касается анализатора.

Основной запрос может ссылаться на один или оба CTE, даже если один уже ссылается на другой.И вы можете соединить более двух CTE вместе.

...