gpt4 book ai didi

teradata - 使用 CTE 语句创建表

转载 作者:行者123 更新时间:2023-12-05 06:42:49 24 4
gpt4 key购买 nike

是否可以使用 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.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

两者都是

  • 将 CTE 转换为 View

  • employees 转换为左连接中的子查询(empl_cte 作为 VIEW)

导致性能大幅下降(运行时间从几分钟激增到几天)。我不知道 Teradata 优化器是如何工作的。新重构查询的 EXPLAIN 似乎表明 LEFT JOIN 成为耗费无数时间的产品连接。

最佳答案

这将适用于 V16(以及可能更早的版本)。

CREATE TABLE myTable AS (
SELECT * FROM (
WITH x AS (
SELECT ...
FROM ...
WHERE ...
)
SELECT ...
FROM x ...
WHERE ...
) D
) WITH DATA PRIMARY INDEX (PK)
;

基本上,您需要将整个查询(包括 CTE)包装在带有别名的 SELECT 中。

关于teradata - 使用 CTE 语句创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35842567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com