Sql Vertica:在合并中,在满足条件时更改更新
我使用以下方法继续更新vertica数据库中的表:Sql Vertica:在合并中,在满足条件时更改更新,sql,merge,insert,vertica,Sql,Merge,Insert,Vertica,我使用以下方法继续更新vertica数据库中的表: 上载要在暂存表stg_表中更新的行列表 在我的新表中操作插入: MERGE INTO table imb USING stg_table stg ON stg.member_id = imb.member_id WHEN MATCHED THEN UPDATE SET next_segment = stg.next_segment, untildate = stg.untildate WHEN NOT MATCHED THEN IN
- 上载要在暂存表stg_表中更新的行列表
- 在我的新表中操作插入:
MERGE INTO table imb USING stg_table stg ON stg.member_id = imb.member_id WHEN MATCHED THEN UPDATE SET next_segment = stg.next_segment, untildate = stg.untildate WHEN NOT MATCHED THEN INSERT (member_id, previous_segment, current_segment, next_segment, untildate) VALUES (stg.member_id, stg.previous_segment, stg.current_segment, stg.next_segment, stg.untildate)
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
我还想把我的附加条件放在“开”中,但我担心当成员id匹配而不是我的附加条件时,它会通过“插入”
如果有人知道我如何做才能达到我想要的目标,即
如果不匹配,则插入
匹配后,更新“但如果在这些情况下满足某些附加条件,则有时不会实际更新,请不要执行任何操作”
什么有效
elirevach向我指出了该案例,而不是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 ...
Somting like(永远不要在真实环境中测试它),当匹配时,然后更新SET next_segment=case当tg.next_segment='x'和imb.current_segment='y'时,然后stg.next_segment否则next_segment结束,untildate=case当tg.next_segment='x'和imb.current_segment='y'时,然后stg.untildate elae untildate–