使用嵌套 select 语句更新查询 teradata
Update query teradata with nested select statement
我正在尝试将一个 select 替换为另一个具有相同参数的 table。
UPDATE DL_RG_ANALYTICS.SH_historico_1
FROM
(
SELECT
ANO_MES, TIP_TAR,DIA_PAGO, MARCA_RENEG, MONTO, TRAMO_MORA, DIA_PAGO, CASOS, CANAL, TRAMO_PAGO, TIPO_MORA, MES
,CAST((MAX_DIA - DIA_PAGO) AS INTEGER) AS DIAS_AL_CIERRE_1
FROM
(SELECT * FROM DL_RG_ANALYTICS.SH_historico_1 A
LEFT JOIN
(SELECT ANO||MES AS ANOMES, MAX(DIA) AS MAX_DIA FROM DL_RG_ANALYTICS.SH_CALENDARIO
GROUP BY 1) B
ON A.ANO_MES = B.ANOMES
) M
)
问题是当我执行更新语句时,它确实有效
另一种方法是创建另一个具有相同结构和信息的 table.. 就像这样
CREATE TABLE DL_RG_ANALYTICS.SH_HISTORICO_2 AS (
SELECT
ANO_MES, TIP_TAR, MARCA_RENEG, MONTO, TRAMO_MORA, DIA_PAGO, CASOS, CANAL, TRAMO_PAGO, CAST((MAX_DIA - DIA_PAGO) AS INTEGER) AS DIAS_AL_CIERRE_1, TIPO_MORA, MES
FROM
(SELECT * FROM DL_RG_ANALYTICS.SH_historico_1 A
LEFT JOIN
(SELECT ANO||MES AS ANOMES, MAX(DIA) AS MAX_DIA FROM DL_RG_ANALYTICS.SH_CALENDARIO
GROUP BY 1) B
ON A.ANO_MES = B.ANOMES
) M
)
WITH DATA;
但这不是一个有效的模式。
感谢任何帮助。
如果您想执行 UPDATE
,您需要使用 SET
来设置值。尝试类似的东西:
UPDATE DL_RG_ANALYTICS.SH_historico_1
FROM (
SELECT
ANO_MES, TIP_TAR,DIA_PAGO, MARCA_RENEG, MONTO, TRAMO_MORA, DIA_PAGO, CASOS, CANAL,
TRAMO_PAGO, TIPO_MORA, MES,CAST((MAX_DIA - DIA_PAGO) AS INTEGER) AS DIAS_AL_CIERRE_1
FROM (
SELECT *
FROM DL_RG_ANALYTICS.SH_historico_1 A
LEFT JOIN (
SELECT ANO||MES AS ANOMES, MAX(DIA) AS MAX_DIA
FROM DL_RG_ANALYTICS.SH_CALENDARIO
GROUP BY 1
) B ON A.ANO_MES = B.ANOMES
) M
) src -- source rows
SET col1 = src.col1 -- set new value(s)
WHERE SH_historico_1.pk_col = src.pk_col -- needs to be 1-1
只需确保 WHERE
子句中的连接条件是 1-1 关系,这样您就不会有多个源行试图更新单个目标行。
我正在尝试将一个 select 替换为另一个具有相同参数的 table。
UPDATE DL_RG_ANALYTICS.SH_historico_1
FROM
(
SELECT
ANO_MES, TIP_TAR,DIA_PAGO, MARCA_RENEG, MONTO, TRAMO_MORA, DIA_PAGO, CASOS, CANAL, TRAMO_PAGO, TIPO_MORA, MES
,CAST((MAX_DIA - DIA_PAGO) AS INTEGER) AS DIAS_AL_CIERRE_1
FROM
(SELECT * FROM DL_RG_ANALYTICS.SH_historico_1 A
LEFT JOIN
(SELECT ANO||MES AS ANOMES, MAX(DIA) AS MAX_DIA FROM DL_RG_ANALYTICS.SH_CALENDARIO
GROUP BY 1) B
ON A.ANO_MES = B.ANOMES
) M
)
问题是当我执行更新语句时,它确实有效
另一种方法是创建另一个具有相同结构和信息的 table.. 就像这样
CREATE TABLE DL_RG_ANALYTICS.SH_HISTORICO_2 AS (
SELECT
ANO_MES, TIP_TAR, MARCA_RENEG, MONTO, TRAMO_MORA, DIA_PAGO, CASOS, CANAL, TRAMO_PAGO, CAST((MAX_DIA - DIA_PAGO) AS INTEGER) AS DIAS_AL_CIERRE_1, TIPO_MORA, MES
FROM
(SELECT * FROM DL_RG_ANALYTICS.SH_historico_1 A
LEFT JOIN
(SELECT ANO||MES AS ANOMES, MAX(DIA) AS MAX_DIA FROM DL_RG_ANALYTICS.SH_CALENDARIO
GROUP BY 1) B
ON A.ANO_MES = B.ANOMES
) M
)
WITH DATA;
但这不是一个有效的模式。
感谢任何帮助。
如果您想执行 UPDATE
,您需要使用 SET
来设置值。尝试类似的东西:
UPDATE DL_RG_ANALYTICS.SH_historico_1
FROM (
SELECT
ANO_MES, TIP_TAR,DIA_PAGO, MARCA_RENEG, MONTO, TRAMO_MORA, DIA_PAGO, CASOS, CANAL,
TRAMO_PAGO, TIPO_MORA, MES,CAST((MAX_DIA - DIA_PAGO) AS INTEGER) AS DIAS_AL_CIERRE_1
FROM (
SELECT *
FROM DL_RG_ANALYTICS.SH_historico_1 A
LEFT JOIN (
SELECT ANO||MES AS ANOMES, MAX(DIA) AS MAX_DIA
FROM DL_RG_ANALYTICS.SH_CALENDARIO
GROUP BY 1
) B ON A.ANO_MES = B.ANOMES
) M
) src -- source rows
SET col1 = src.col1 -- set new value(s)
WHERE SH_historico_1.pk_col = src.pk_col -- needs to be 1-1
只需确保 WHERE
子句中的连接条件是 1-1 关系,这样您就不会有多个源行试图更新单个目标行。