插入CTE表值转换为物理表时的错误(Error when inserting CTE table v

2019-10-31 06:03发布

我有一个创建一个主CTE_Table形式等CTE_Tables一个复杂的查询。 我想插入主CTE_Table的结果为物理表。 我使用的Teradata版本15.10.04.03

选择失败。 [3707]语法错误,预期像一个“SELECT”关键字或“(”或“TRANSACTIONTIME”关键字或之间的“VALIDTIME”关键字“)”和“插入”的关键字。

DROP TABLE dbname.physicalTablename;

CREATE TABLE MULTISET dbname.physicalTablename,NO FALLBACK,NO BEFORE JOURNAL,NO AFTER JOURNAL,CHECKSUM = DEFAULT,DEFAULT MERGEBLOCKRATIO(COL1 INTEGER,COL2 INTEGER,COL3 INTEGER)NO主索引;

WITH

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

cteTable2 AS(SELECT COL1,COL2,COL3 FROM SourceTableB)

cteTable1 AS(SELECT可乐,COLB,COLC FROM SourceTableA)

INSERT INTO dbname.physicalTablename(COL1,COL2,COL3,COL4,COL5,COL6)
SELECT(C3.colA,C3.colB,C3.colC,C3.col1,C3.col2,C3.col3)FROM cteTable3 C3;

Answer 1:

当你缺少问题的INSERT部分,我觉得有以下可能明确的事情了。 在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;


文章来源: Error when inserting CTE table values into physical table