Sql 如何用另一个表(目标)更新一个表(源)中的2列
我有一个名为Edwin.psp_labour_schd_day_f_rollup_frs_356的源表和一个名为Edwin.psp_labour_schd_day_f_rollup的目标表,我需要更新源到目标的日期值。这两个日期列是SRC_CREATED_date和SRC_LAST_UPDATE_date。基于以下on条款Sql 如何用另一个表(目标)更新一个表(源)中的2列,sql,oracle,oracle11g,oracle10g,Sql,Oracle,Oracle11g,Oracle10g,我有一个名为Edwin.psp_labour_schd_day_f_rollup_frs_356的源表和一个名为Edwin.psp_labour_schd_day_f_rollup的目标表,我需要更新源到目标的日期值。这两个日期列是SRC_CREATED_date和SRC_LAST_UPDATE_date。基于以下on条款 A.PAY_RANGE_START_DATE_KEY = B.PAY_RANGE_START_DATE_KEY AND A.AA_PERSON_NATURAL_KEY
A.PAY_RANGE_START_DATE_KEY = B.PAY_RANGE_START_DATE_KEY AND
A.AA_PERSON_NATURAL_KEY = B.AA_PERSON_NATURAL_KEY AND
A.AA_PERSON_ASSIGNMENT_KEY = B.AA_PERSON_ASSIGNMENT_KEY AND
A.SCHEDULE_LINE_ID = B.SCHEDULE_LINE_ID
如何做到这一点
我们正在使用的合并代码
MERGE
/*+ parallel(A) enable_parallel_dml*/
INTO
(
SELECT
PAY_RANGE_START_DATE_KEY,
AA_PERSON_NATURAL_KEY,
AA_PERSON_ASSIGNMENT_KEY,
SCHEDULE_LINE_ID,
SRC_CREATED_DATE,
SRC_LAST_UPDATE_DATE
FROM
EDWFIN.PSP_LABOR_SCHD_DAY_F_ROLLUP
)
A USING
(
SELECT
pay_range_start_date_key,
aa_person_natural_key,
aa_person_assignment_key,
schedule_line_id,
MAX(src_created_date) src_created_date,
MAX(src_last_update_date) src_last_update_date
FROM
edwfin.psp_labor_schd_day_f_rollup_frs_356
GROUP BY
pay_range_start_date_key,
aa_person_natural_key,
aa_person_assignment_key,
schedule_line_id
)
B ON
(
A.PAY_RANGE_START_DATE_KEY = B.PAY_RANGE_START_DATE_KEY AND
A.AA_PERSON_NATURAL_KEY = B.AA_PERSON_NATURAL_KEY AND
A.AA_PERSON_ASSIGNMENT_KEY = B.AA_PERSON_ASSIGNMENT_KEY AND
A.SCHEDULE_LINE_ID = B.SCHEDULE_LINE_ID
)
WHEN MATCHED THEN
UPDATE
SET
A.SRC_CREATED_DATE = B.SRC_CREATED_DATE,
A.SRC_LAST_UPDATE_DATE = B.SRC_LAST_UPDATE_DATE
WHERE
A.SRC_CREATED_DATE <> B.SRC_CREATED_DATE
OR A.SRC_LAST_UPDATE_DATE <> B.SRC_LAST_UPDATE_DATE;
你试过什么?你研究过连接吗?我之前使用过merge,但主要问题是merging抛出我得到了相同的ORA-30926错误,但业务部门希望即使是重复的数据也要更新,因此,Think update不像merge那样逐行进行处理,并且可以再次更新同一组行两次,因此希望使用update语句进行测试。请提供示例数据和所需结果。如果您有现有代码,您应该显示它。如果您遇到ORA-30926:无法在源表中获得一组稳定的行错误,因为源表中有多行,而目标表中只有一行,您如何知道这两个值中的哪一个用于更新?如果您解决了这个问题,就可以解决合并问题。如果不解决此问题,您的更新可能会遇到一个问题,即单行子查询返回多行。请阅读并注意