【问题标题】:ORACLE - Merge statement, update when match and destiny values are nullORACLE - 合并语句,当匹配和命运值为空时更新
【发布时间】:2021-08-31 18:32:26
【问题描述】:

我有一个合并语句,当命运表在这些列中有空值时,我需要更新几列。 如果 x 列在命运中为空,则仅更新该列。如果命运中只有 2 列为空,则仅更新这 2 列。 如何验证每列是否更新,检查命运是否为空?

 MERGE INTO all_weather_mv p
              USING (SELECT 
                    a.ACTUAL_DRY_BULB_TEMP_F
                   ,a.ACTUAL_DEW_POINT_F
                   ,a.ACTUAL_WIND_SPEED_MPH
                   ,a.ACTUAL_RELATIVE_HUMIDITY_PCT
                   ,a.ACTUAL_STATION_PRESSURE_IN
                   ,a.ACTUAL_HOURLY_PRECIP_IN
                   ,a.OBJECTID
                   ,a.DATETIME_UTC
               FROM gtt_all_weather_mv  a
                   ,wx_stations        w
               WHERE w.OBJECTID      = a.OBJECTID
               AND w.WX_PREFERENCE = 1) d
               ON (p.OBJECTID     = d.OBJECTID
               AND p.DATETIME_UTC = d.DATETIME_UTC
            )
    WHEN MATCHED THEN 
     UPDATE SET p.ACTUAL_DRY_BULB_TEMP_F=d.ACTUAL_DRY_BULB_TEMP_F,
                p.ACTUAL_DEW_POINT_F=d.ACTUAL_DEW_POINT_F,
                p.ACTUAL_WIND_SPEED_MPH=d.ACTUAL_WIND_SPEED_MPH,
                p.ACTUAL_RELATIVE_HUMIDITY_PCT=d.ACTUAL_RELATIVE_HUMIDITY_PCT,
                p.ACTUAL_STATION_PRESSURE_IN=d.ACTUAL_STATION_PRESSURE_IN,
                p.ACTUAL_HOURLY_PRECIP_IN=d.ACTUAL_HOURLY_PRECIP_IN              
    WHEN NOT MATCHED
    THEN
          INSERT ( 
                  OBJECTID,
                  DATETIME_UTC, 
                  ACTUAL_DRY_BULB_TEMP_F, 
                  ACTUAL_DEW_POINT_F,
                  ACTUAL_WIND_SPEED_MPH,
                  ACTUAL_RELATIVE_HUMIDITY_PCT, 
                  ACTUAL_STATION_PRESSURE_IN,
                  ACTUAL_HOURLY_PRECIP_IN
                 )
VALUES (    d.OBJECTID,
            d.DATETIME_UTC,
            d.ACTUAL_DRY_BULB_TEMP_F, 
            d.ACTUAL_DEW_POINT_F,
            d.ACTUAL_WIND_SPEED_MPH,
            d.ACTUAL_RELATIVE_HUMIDITY_PCT, 
            d.ACTUAL_STATION_PRESSURE_IN,
            d.ACTUAL_HOURLY_PRECIP_IN
        )

问候

【问题讨论】:

    标签: sql oracle merge


    【解决方案1】:

    使用NVL函数,例如

    WHEN MATCHED THEN 
      UPDATE SET p.ACTUAL_DRY_BULB_TEMP_F = nvl(p.ACTUAL_DRY_BULB_TEMP_F, d.ACTUAL_DRY_BULB_TEMP_F),
    

    其中说:如果p.ACTUAL_DRY_BULB_TEMP_F 为空(即NULL),则将d.ACTUAL_DRY_BULB_TEMP_F 放入其中。

    所有其他列也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      相关资源
      最近更新 更多