同步两个表之间的值

时间:2014-07-17 05:18:48

标签: sql oracle

我的oracle SQL查询有问题。所以我想要做的就是在两个表之间同步值。当两个表之间出现相同的head_mark时,应该同步SURFACE值并根据另一个表中的表面进行更新。所以我的查询是这样的,

update painting_qc_hist pqh set pqh.current_qc_surface = mda.surface
where exists
(select 1 from master_drawing_assigned mda where md.head_mark = mda.head_mark)

我的表结构是,

在MASTER_DRAWING_ASSIGNED,

HEAD_MARK ID SURFACE
SMSBM180  1  59.96
SMSBM181  1  60.3

并且在PAINTING_QC_HIST中,CURRENT_QC_SURFACE应根据与MASTER_DRAWING_ASSIGNED中的SURFACE值相同的标记进行更新

HEAD_MARK ID CURRENT_QC_SURFACE
SMSBM180  1  
SMSBM181  1

所以期望的结果应该是,

HEAD_MARK ID CURRENT_QC_SURFACE
SMSBM180  1  59.96
SMSBM181  1  60.3

请帮帮我,我的查询有什么问题?

2 个答案:

答案 0 :(得分:4)

当以merge实施时,这通常更有效。

MERGE INTO painting_qc_hist dst
USING (SELECT surface, head_mark FROM master_drawing_assigned) src
ON (dst.head_mark = src.head_mark)
WHEN MATCHED THEN UPDATE SET dst.current_qc_surface = src.surface;

答案 1 :(得分:1)

您可以尝试这样的事情: -

UPDATE TABLE PAINTING_QC_HIST A
SET A.CURRENT_QC_SURFACE = (SELECT SURFACE 
                            FROM MASTER_DRAWING_ASSIGNED B
                            WHERE A.HEAD_MARK = B.HEAD_MARK)
WHERE A.HEAD_MARK = (SELECT A.ID FROM PAINTING_QC_HIST A);

希望这会对你有所帮助。