Vertica:在 MERGE 中,满足条件时更改 UPDATE

Vertica : in a MERGE, changing the UPDATE when a condition is met

我使用以下方法继续更新我的 vertica 数据库中的 table:

现在我有兴趣提出另一个条件:我希望 "UPDATE" 只有在 table 和 stg_table.

上都满足某些条件时才会发生

基本上,我想要这样的东西:

    WHEN MATCHED THEN UPDATE
    SET     next_segment = stg.next_segment,
    untildate = stg.untildate
    WHERE stg.next_segment='x' AND  imb.current_segment='y'

==> 这不起作用,因为我不能在 Vertica 中放置 WHERE

我也试过了:

    WHEN MATCHED THEN UPDATE
    SET     next_segment = IF(stg.next_segment='x' AND  imb.current_segment='x',stg.next_segment,imb.next_segment)
    untildate = IF(stg.next_segment='x' AND  imb.current_segment='x',stg.untildate,imb.untildate)

==> 这不起作用,因为我似乎不能在这里使用 IF

我也想过把我的附加条件放在"ON"里,但是我担心当member_id符合但不符合我的附加条件时,它会通过"INSERT"。

如果有人知道我该怎么做才能实现我想要实现的目标,即

不匹配则插入 匹配后更新 "but sometimes do not actually update if some additional condition is met in these cases pls do nothing"

有效方法

elirevach 指出 CASE 而不是 IF 将起作用:

    WHEN MATCHED THEN UPDATE
    SET     next_segment =  CASE stg.next_segment='x' AND  imb.current_segment='x'  THEN stg.next_segment ELSE imb.next_segment END,
    untildate = CASE stg.next_segment='x' AND  imb.current_segment='x' THEN stg.untildate ELSE imb.untildate END

另一种更繁重的方法是简单地启动 3 个请求:

   MERGE INTO table imb USING stg_table stg ON stg.member_id = imb.member_id  AND  MyOtherCondition
   WHEN MATCHED THEN UPDATE ...

   MERGE INTO table imb USING stg_table stg ON stg.member_id = imb.member_id  AND  NOT MyOtherCondition
   WHEN MATCHED THEN UPDATE ...

然后插入:

   MERGE INTO table imb USING stg_table stg ON stg.member_id = imb.member_id  
   WHEN NOT MATCHED THEN INSERT ...

有点像(永远不要在真实环境中测试它),当匹配时更新设置 next_segment = tg.next_segment='x' 和 imb.current_segment=[=13 时的情况=] then stg.next_segment else next_segment end , untildate = case when tg.next_segment='x' AND imb.current_segment='y' then stg.untildate elae 直到日期 –