【问题标题】:Oracle SQL | Merge-Select-Update Clause | Subset of Target Table甲骨文 SQL |合并-选择-更新子句 |目标表的子集
【发布时间】:2018-02-23 10:03:36
【问题描述】:

我打算做什么?
为匹配的目标记录的子集更新一些目标表字段,在源和目标之间进行匹配,前提是它们都是同一个表。

哪里需要帮助?
Merge-into-target-using-select-source-on-子句似乎只控制两个类别-

  • 当源记录和目标记录匹配时,更新所有匹配的目标记录
  • 当源和目标记录不匹配时,插入或执行其他控制操作。

在我的情况下,当源记录和目标记录匹配时,我想对目标的不是所有记录执行更新,而是对目标记录的子集执行更新.

请求帮助以指导这一点。

这里的代码供参考(目标过滤限定符已注释,因为它肯定不会起作用):

MERGE INTO TGT
USING (
SELECT id, account_number, part_role, inc_val, pay_frequency, 
period, pay_option, inclusion_value 
FROM Table_1
WHERE id = var1
AND account_number = var2
AND part_role in ('YY','XX')
) SRC
ON (
SRC.id = TGT.id
AND SRC.account_number = TGT.account_number
--TGT.part_role in ('AA','BB','CC','DD','EE') --This must be a wrong place for this qualifier, please help on where to include this qualifier for filtering out target records for update purpose
)
WHEN MATCHED THEN
UPDATE SET
TGT.inc_val = SRC.inc_val 
,TGT.pay_frequency = SRC.pay_frequency 
,TGT.period = SRC.period 
,TGT.pay_option = SRC.pay_option 
,TGT.inclusion_value = SRC.inclusion_value;

其他相关详情
数据库:甲骨文
版本:11gR2
环境:Unix

【问题讨论】:

    标签: sql oracle merge


    【解决方案1】:

    SET 语句之后添加where 子句。

    MERGE INTO TGT
    USING (SELECT
      id,
      account_number,
      part_role,
      inc_val,
      pay_frequency,
      period,
      pay_option,
      inclusion_value
    FROM Table_1
    WHERE id = var1
    AND account_number = var2
    AND part_role IN ('YY', 'XX')) SRC
    ON (
    SRC.id = TGT.id
    AND SRC.account_number = TGT.account_number
    --TGT.part_role in ('AA','BB','CC','DD','EE') --This must be a wrong place for this qualifier, please help on where to include this qualifier for filtering out target records for update purpose
    )
    WHEN MATCHED THEN
    UPDATE SET
    TGT.inc_val = SRC.inc_val
    , TGT.pay_frequency = SRC.pay_frequency
    , TGT.period = SRC.period
    , TGT.pay_option = SRC.pay_option
    , TGT.inclusion_value = SRC.inclusion_value
    WHERE TGT.part_role in ('AA','BB','CC','DD','EE');
    

    【讨论】:

    • 感谢考希克!我的错,我想不通这个修复:)
    猜你喜欢
    • 2011-10-04
    • 2017-01-24
    • 2019-01-30
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2017-03-21
    相关资源
    最近更新 更多