Синтаксис Teradata SQL — общие табличные выражения

При использовании нескольких CTE в MSSQL 2008 я обычно разделяю их запятой.

Но когда я пытаюсь это сделать в среде Teradata, я получаю сообщение об ошибке с синтаксисом.

Работает в MS SQL:

WITH CTE1 AS 
(SELECT TOP 2 Name FROM Sales.Store)
,CTE2 AS 
(SELECT TOP 2 ProductNumber, Name FROM Production.Product)
,CTE3 AS 
(SELECT TOP 2 Name FROM Person.ContactType)
SELECT * FROM CTE1,CTE2,CTE3

Теперь, пытаясь ввести синтаксис Teradata:

WITH RECURSIVE CTE1 (Name) AS 
(SELECT TOP 2 Name FROM Sales.Store)
,RECURSIVE CTE2 (ProductNumber, Name) AS 
(SELECT TOP 2 ProductNumber, Name FROM Production.Product)
,RECURSIVE CTE3 (Name) AS 
(SELECT TOP 2 Name FROM Person.ContactType)
SELECT * 
FROM CTE1,CTE2,CTE3

Синтаксическая ошибка, ожидалось что-то вроде имени или идентификатора с разделителями Unicode между ',' и ключевым словом 'RECURSIVE'.

2-я попытка (без многократного использования RECURSIVE)

WITH RECURSIVE CTE1 (Name) AS 
(SELECT TOP 2 Name FROM Sales.Store)
,CTE2 (ProductNumber, Name) AS 
(SELECT TOP 2 ProductNumber, Name FROM Production.Product)
,CTE3 (Name) AS 
(SELECT TOP 2 Name FROM Person.ContactType)
SELECT * 
FROM CTE1,CTE2,CTE3

Несколько определений WITH не поддерживаются.


person Josh    schedule 27.03.2013    source источник
comment
Вторая попытка - это правильный синтаксис ANSI SQL, но, по-видимому, teradata не поддерживает это (по крайней мере, так я интерпретировал сообщение об ошибке не поддерживается)   -  person a_horse_with_no_name    schedule 27.03.2013


Ответы (1)


Несколько CTE поддерживаются в версии 14.0 Teradata. Вы можете загрузить TD v14 для VMware с веб-сайта Teradata Developer Network и протестировать его.

person RM5III3O    schedule 03.04.2013