2013-03-27 201 views
3

在MSSQL 2008中使用多個CTE時,我通常用逗號分隔它們。Teradata SQL語法 - 公用表表達式

但是,當我在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次嘗試(不使用遞歸多次)與定義

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 

多不被支持。

+0

第二次嘗試是正確的ANSI SQL語法,但顯然Teradata不支持這一點(至少這是我將如何解釋錯誤消息「*不支持*」) – 2013-03-27 15:18:32

回答

3

Teradata 14.0版本支持多個CTE。您可以從Teradata Developer Network網站下載適用於VMware的TD v14並進行測試。