1

尝试在 SQLAssitant (v 15.x Teradata) 中执行:

WITH   TEMP1 (EMP_ID,E_NAME,E_SAL) AS (WITH TEMP (EMP_ID,E_NAME,E_SAL) AS (SELECT EMP_ID,E_NAME,E_SAL FROM EMP_TABLE_TEST)
SELECT EMP_ID,E_NAME,E_SAL FROM TEMP) SELECT EMP_ID,E_NAME,E_SAL FROM TEMP1

错误:选择失败。6926:定义、视图、触发器或存储过程

WITH TEMP (EMP_ID,E_NAME,E_SAL) AS (SELECT EMP_ID,E_NAME,E_SAL FROM EMP_TABLE_TEST ) , TEMP1  (EMP_ID,E_NAME,E_SAL) AS (
SELECT EMP_ID,E_NAME,E_SAL FROM TEMP) SELECT  EMP_ID,E_NAME,E_SAL FROM TEMP1

错误:选择失败。3807:对象“TEMP”不存在。

Teradata 是否真的支持多个 WITH 子句或 WITH 子句内的 WITH?

我听说 14.x 更高版本支持它,但它不支持 15.x。

4

2 回答 2

2

语法不同(与其他数据库相同)
With t1 as (...),t2 as (...), t3 as (...) select ...


目前参考顺序是颠倒的
——t2 可以参考 t3,t1 可以参考 t2 和 t3。
TD16 将支持“正确”顺序。

于 2016-11-16T07:55:44.010 回答
0

这已在 Teradata 16 中修复。请参阅版本摘要第 2 章。

http://www.info.teradata.com/doclist.cfm?RetainParams=Y&FilterCall=Y&selDocType=100

以前,当非递归 WITH 子句定义多个 CTE 时,CTE 只能引用 WITH 子句中的后续 CTE。现在,CTE 可以在 WITH 子句中引用前面或后面的 CTE。

来自版本 16 的 Teradata 发布摘要

于 2017-02-15T10:01:14.147 回答