在 Teradata 16.20 中,有没有办法更新或合并两个 CTE?
In Teradata 16.20 is there a way to update or merge from two CTEs?
在 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 做到这一点?
您不能在派生的 table 中使用 WITH (CTE)(这是上面 MERGE
语句的 USING
子句中的内容),但您可以使用嵌套派生 tables:
merge into mydb.mytable u
using (
select beta, gamma
from (
select alpha, beta
from someTable a
join otherTable b on a.aleph = b.aleph
) CTE1
join anotherTable d on CTE1.alpha = d.alpha
) CTE2
on u.beta = CTE2.beta
when matched then update
set gamma = CTE2.gamma;
或者如果 MERGE
不适用(例如,连接谓词不包括所有主索引列)与连接 UPDATE
:
相同的方法
UPDATE u FROM mydb.mytable u,
(
select beta, gamma
from (
select alpha, beta
from someTable a
join otherTable b on a.aleph = b.aleph
) CTE1
join anotherTable d on CTE1.alpha = d.alpha
) CTE2
set gamma = CTE2.gamma
WHERE u.beta = CTE2.beta;
在 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 做到这一点?
您不能在派生的 table 中使用 WITH (CTE)(这是上面 MERGE
语句的 USING
子句中的内容),但您可以使用嵌套派生 tables:
merge into mydb.mytable u
using (
select beta, gamma
from (
select alpha, beta
from someTable a
join otherTable b on a.aleph = b.aleph
) CTE1
join anotherTable d on CTE1.alpha = d.alpha
) CTE2
on u.beta = CTE2.beta
when matched then update
set gamma = CTE2.gamma;
或者如果 MERGE
不适用(例如,连接谓词不包括所有主索引列)与连接 UPDATE
:
UPDATE u FROM mydb.mytable u,
(
select beta, gamma
from (
select alpha, beta
from someTable a
join otherTable b on a.aleph = b.aleph
) CTE1
join anotherTable d on CTE1.alpha = d.alpha
) CTE2
set gamma = CTE2.gamma
WHERE u.beta = CTE2.beta;