我的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
请帮帮我,我的查询有什么问题?
答案 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);
希望这会对你有所帮助。