Teradata 使用CTE语句创建表
是否可以使用CTE语句从查询创建表? 比如:Teradata 使用CTE语句创建表,teradata,Teradata,是否可以使用CTE语句从查询创建表? 比如: CREATE TABLE db1.test1 AS ( WITH cte1(v1) as ( SEL v1 FROM db1.table1 ) SEL * FROM cte1 ) 这就是CTE的外观: WITH employees(id, name, boss, senior_boss) AS ( SEL empls.id, empls.name, supervisors.name as boss, senior_bosses.na
CREATE TABLE db1.test1 AS
(
WITH cte1(v1) as
( SEL v1 FROM db1.table1 )
SEL * FROM cte1
)
这就是CTE的外观:
WITH employees(id, name, boss, senior_boss) AS
(
SEL
empls.id,
empls.name,
supervisors.name as boss,
senior_bosses.name as senior_boss
FROM empl_cte AS empls
LEFT JOIN empl_cte AS supervisors ON empls.boss_id = supervisors.id
LEFT JOIN empl_cte AS senior_bosses ON supervisors.boss_id = senior_bosses.id
),
WITH empl_cte(....) AS
(
SEL
id,
name
boss_id
FROM all_employees
WHERE <some_filters>
)
SEL
*
FROM products
LEFT JOIN employees ON products.sales_rep_id = employees.id
员工(身份证、姓名、老板、高级老板)为
(
选择
雇员身份证,
姓名,
作为上司,
高级上司。姓名为高级上司
从雇员处作为雇员
在empls.boss\u id=supervisors.id上将emplu\u cte作为主管左加入empls\u cte
左加入员工作为主管的高级上司。上司id=高级上司。id
),
雇员(..)为
(
选择
身份证件
名称
老板
来自所有员工
哪里
)
选择
*
来自产品
LEFT JOIN products.sales\u rep\u id=employees.id上的员工
两者
- 将CTE转换为视图
- 将
转换为左侧联接中的子查询(employees
作为视图)employees
EXPLAIN
关于新的重构查询似乎表明左连接将成为耗费无数时间的产品连接。这将在V16(以及可能的早期版本)中起作用
基本上,您需要使用别名将整个查询(包括CTE)包装在SELECT中。Afaik no。除了先创建表,然后使用…insert into test1之外,似乎没有其他解决方法。
您能将CTE放入视图吗?如果是这样,那么您的create table语句就可以工作了。@Nick我可以,但在性能方面这是一个灾难是的,左外部联接绝对可以终止查询。是否可以使用全局临时表而不需要创建表作为select?不,我不能使用GTT,因为我使用的管道不支持这一点。
CREATE TABLE myTable AS (
SELECT * FROM (
WITH x AS (
SELECT ...
FROM ...
WHERE ...
)
SELECT ...
FROM x ...
WHERE ...
) D
) WITH DATA PRIMARY INDEX (PK)
;