将 CTE table 值插入物理 table 时出错

Error when inserting CTE table values into physical table

我有一个复杂的查询,它从其他 CTE_Table 中创建一个主 CTE_Table。我想把masterCTE_Table的结果插入到物理table中。我使用的是 Teradata 版本 15.10.04.03

SELECT失败。 [3707] 语法错误,需要类似 'SELECT' 关键字或“(”或 'TRANSACTIONTIME' 关键字或“)”和 'INSERT' 关键字之间的 'VALIDTIME' 关键字。

丢弃 TABLE dbname.physicalTablename ;

创建多集 TABLE dbname.physicalTablename , 没有回退, 没有在期刊之前, 没有日记后, 校验和 = 默认值, 默认 MERGEBLOCKRATIO ( col1 整数, col2 整数, col3 整数 ) 没有主要索引;

cteTable3 AS ( SELECT A.colA, A.colB, A.colC, B.col1, B.col2, B.col3 FROM cteTable1 A INNER JOIN cteTable2 ON (blah blah blah) ),

cteTable2 AS (SELECT 来自 SourceTableB 的 col1、col2、col3),

cteTable1 AS (SELECT 来自 SourceTableA 的 colA、colB、colC)

插入 dbname.physicalTablename ( col1, col2, col3, col4, col5, col6 )
SELECT (C3.colA, C3.colB, C3.colC, C3.col1, C3.col2, C3.col3) 从 cteTable3 C3 ;

虽然您遗漏了问题的插入部分,但我认为以下内容可能会解决问题。在 INSERT 中使用 CTE 的正确格式是:

INSERT INTO <tablename>
WITH <cte> AS (SELECT...)
SELECT <fields> FROM <cte>

考虑以下几点:

CREATE MULTISET VOLATILE TABLE tmp AS (SELECT 'bobby' as firstname) WITH DATA ON COMMIT PRESERVE ROWS;

INSERT INTO tmp
WITH cte AS (select 'carol' as firstname)
SELECT * FROM cte;

SELECT * FROM tmp;

DROP TABLE tmp;