使用嵌套 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 关系,这样您就不会有多个源行试图更新单个目标行。