【发布时间】:2020-10-16 10:20:34
【问题描述】:
在 Teradata 16.20 中是否可以从两个 CTE 更新或合并?
例如,在 MSSQL 中,我们有第一个 CTE,第二个 CTE 使用第一个 CTE,然后是更新:
with CTE1 as (
select alpha, beta
from someTable a
join otherTable b on a.aleph = b.aleph
), CTE2 as (
select beta, gamma
from CTE1 c
join anotherTable d on c.alpha = d.alpha
)
update u
set u.gamma = e.gamma
from updateTable u
join CTE2 e on u.beta = e.beta;
在 Teradata 16.20 中,这当然适用于一个 CTE,如下所示:
merge into mydb.mytable
using (
select alpha, beta
from someTable a
join otherTable b on a.aleph = b.aleph
) as CTE (alpha, beta)
on mytable.alpha = CTE.alpha
when matched then update
set beta = CTE.beta;
有没有办法用两个或更多 CTE来做到这一点?
【问题讨论】:
-
我不知道我是否过于挑剔,但在您的 Teradata 查询中,您没有 CTE,您有一个派生表。无论如何,我认为 Teradata 只支持单个“表”作为源表(
using表)。您可以通过在该派生表中执行所有联接等来解决此问题。 -
好的,那么我会研究替代方案。手册上说 WITH 只能与 SELECT 一起使用,所以如果 MERGE with USING 仅限于单个派生表,我就不走运了。这不是 Teradata 第一次令人失望。
标签: sql teradata teradata-sql-assistant