Teradata SQL语法 - 公共表达式

3

在MSSQL 2008中使用多个CTE时,我通常使用逗号进行分隔。

但是在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

语法错误,期望在“,”和“RECURSIVE”关键字之间提供类似名称或Unicode限定符的内容。
第二次尝试(不使用多个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定义。

注:本句为IT技术相关内容,意思为不允许同时定义多个WITH语句。

第二次尝试是正确的 ANSI SQL 语法,但显然 Teradata 不支持此语法(至少这就是我对错误信息“不支持”的解释)。 - user330315
1个回答

3

Teradata的14.0版本支持多个CTE。您可以从Teradata开发者网络网站下载TD v14 for VMware并进行测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接