При использовании нескольких 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 не поддерживаются.