Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Select CTE из CTE  [new]
Дмитрий16
Member

Откуда: Новосибирск
Сообщений: 481
Это понятно
WITH CTE AS
(
SELECT 1 AS N
UNION
SELECT 2
)
SELECT * FROM CTE


А как оформить чтото вроде вот этого?
WITH CTE1 AS
(

WITH CTE AS
(
SELECT 1 AS N
UNION
SELECT 2
)
SELECT * FROM CTE
) SELECT * FROM CTE1
28 авг 09, 14:35    [7591045]     Ответить | Цитировать Сообщить модератору
 Re: Select CTE из CTE  [new]
__Avenger__
Member

Откуда:
Сообщений: 1984
WITH CTE1 AS (
    SELECT * FROM CTE
  ),
 CTE AS
(
SELECT 1 AS N
UNION
SELECT 2
)
SELECT * FROM CTE1, cte
28 авг 09, 14:40    [7591077]     Ответить | Цитировать Сообщить модератору
 Re: Select CTE из CTE  [new]
__Avenger__
Member

Откуда:
Сообщений: 1984
Ой...

WITH CTE AS
(
SELECT 1 AS N
UNION
SELECT 2
),

CTE1 AS (
    SELECT * FROM CTE
  )
SELECT * FROM CTE1

?
28 авг 09, 14:40    [7591083]     Ответить | Цитировать Сообщить модератору
 Re: Select CTE из CTE  [new]
Дмитрий16
Member

Откуда: Новосибирск
Сообщений: 481
Msg 208, Level 16, State 1, Line 1
Invalid object name 'CTE'.
28 авг 09, 14:41    [7591085]     Ответить | Цитировать Сообщить модератору
 Re: Select CTE из CTE  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Дмитрий16
А как оформить чтото вроде вот этого?
WITH CTE1 AS
(

WITH CTE AS
(
SELECT 1 AS N
UNION
SELECT 2
)
SELECT * FROM CTE
) SELECT * FROM CTE1


Невижу никакого преимущества использования в этом варианте CTE над derived tables.
28 авг 09, 14:45    [7591113]     Ответить | Цитировать Сообщить модератору
 Re: Select CTE из CTE  [new]
Дмитрий16
Member

Откуда: Новосибирск
Сообщений: 481
pkarklin
Невижу никакого преимущества использования в этом варианте CTE над derived tables.


Это пример. У меня по коду туда пихается достаточно сложное рекурсивное выражение. На которое нахлобучивается сверху еще одно. Вещь разовая и захотелось обойтись без вьюшек.
28 авг 09, 14:54    [7591186]     Ответить | Цитировать Сообщить модератору
 Re: Select CTE из CTE  [new]
petsa
Member

Откуда:
Сообщений: 1708
https://www.sql.ru/forum/actualthread.aspx?tid=658370&hl=petsa
28 авг 09, 15:13    [7591308]     Ответить | Цитировать Сообщить модератору
 Re: Select CTE из CTE  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Дмитрий16
pkarklin
Невижу никакого преимущества использования в этом варианте CTE над derived tables.


Это пример. У меня по коду туда пихается достаточно сложное рекурсивное выражение. На которое нахлобучивается сверху еще одно. Вещь разовая и захотелось обойтись без вьюшек.
Рекурсивное CTE, которое обращается к другому рекурсивному CTE?
Могу ошибаться, но бòльшего тормоза не придумаешь.
28 авг 09, 15:20    [7591359]     Ответить | Цитировать Сообщить модератору
 Re: Select CTE из CTE  [new]
Var79
Member

Откуда:
Сообщений: 890
так вроде нельзя использовать вложеные СТЕ
28 авг 09, 16:09    [7591774]     Ответить | Цитировать Сообщить модератору
 Re: Select CTE из CTE  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Var79
так вроде нельзя использовать вложеные СТЕ
Выше же ответили. И ссылку на другое обсуждение дали...
В общем, после WITH перечисляете их, родимых, через запятую.
Причём в каждом следующем можете обращаться к любому предыдущему сколько надо раз.
В самом конце - SELECT или UPDATE или INSERT или DELETE или MERGE с использованием любых объектов БД и определённых в WITH CTE
28 авг 09, 16:17    [7591836]     Ответить | Цитировать Сообщить модератору
 Re: Select CTE из CTE  [new]
Var79
Member

Откуда:
Сообщений: 890
http://msdn.microsoft.com/ru-ru/library/ms175972.aspx
Задание в одном CTE-выражении нескольких предложений WITH недопустимо. Например, если CTE_query_definition содержит вложенный запрос, этот вложенный запрос не может содержать вложенное предложение WITH, определяющее другое CTE-выражение.
28 авг 09, 16:17    [7591839]     Ответить | Цитировать Сообщить модератору
 Re: Select CTE из CTE  [new]
Var79
Member

Откуда:
Сообщений: 890
iap
Var79
так вроде нельзя использовать вложеные СТЕ
Выше же ответили. И ссылку на другое обсуждение дали...
В общем, после WITH перечисляете их, родимых, через запятую.
Причём в каждом следующем можете обращаться к любому предыдущему сколько надо раз.
В самом конце - SELECT или UPDATE или INSERT или DELETE или MERGE с использованием любых объектов БД и определённых в WITH CTE

угу
28 авг 09, 16:19    [7591858]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить