oracle中的更新语句与join [重复]
Posted
技术标签:
【中文标题】oracle中的更新语句与join [重复]【英文标题】:update statement in oracle with join [duplicate] 【发布时间】:2014-12-31 00:55:31 【问题描述】:我已经创建了这个 sql,我需要用给定的结果更新表
SELECT DISTINCT t1.t1_val3, t1.t1_val4
DECODE (b_val,
'A', 'Its A',
'B', 'Its B',
'C', 'Its C',
NULL
) decode_val,
FROM t1, t2, t3
WHERE t1.t1_val = t2.t2_val
AND t2.t2_val = t3.t3_val
AND t3.t3_val2 <> 'PSA'
AND t3.t3_val2 = 'Y'
现在使用这个查询我需要更新 t1 表。
类似的,
update t1
set
t1.val5=decode_val
where t1.t1_val3= value returned from above query(first column t1_val3)
and t1.t1_val4= value returned from above query(2nd column t1_val4)
DB - 10g
【问题讨论】:
【参考方案1】:试试这个:
update t1
set
t1.val5 =DECODE (b_val,
'A', 'Its A',
'B', 'Its B',
'C', 'Its C',
NULL
)
FROM t1, t2, t3
WHERE t1.t1_val = t2.t2_val
AND t2.t2_val = t3.t3_val
AND t3.t3_val2 <> 'PSA'
AND t3.t3_val2 = 'Y'
【讨论】:
请在提交前验证您的帖子,始终使用代码标签并检查标签是否正确应用。 我是新来的。对不起 :) 没问题。我已经编辑了你的答案。 这也适用于我。 将其标记为答案,这可能对某人有所帮助【参考方案2】:由于您使用的是 10g,MATCHED
和 NOT MATCHED
子句现在是 optional
。
MERGE INTO t1 a
USING (SELECT DISTINCT t1.t1_val3, t1.t1_val4
DECODE (b_val,
'A', 'Its A',
'B', 'Its B',
'C', 'Its C',
NULL
) decode_val,
FROM t1, t2, t3
WHERE t1.t1_val = t2.t2_val
AND t2.t2_val = t3.t3_val
AND t3.t3_val2 <> 'PSA'
AND t3.t3_val2 = 'Y') b
ON(a.t1_val3 = b.t1_val_3 and a.t1_val4 = b.t1_val4)
WHEN MATCHED THEN
UPDATE SET a.t1.val5 = b.decode_val
【讨论】:
谢谢拉利特。像魅力一样工作:)以上是关于oracle中的更新语句与join [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 INNER JOIN 更新 SQL Server 中的多个表 [重复]