Oracle SQL 更新列,其中包含使用三个条件语句的另一个表中的数据



场景:

我有两个单独的表(表 1 和表 2) 我想用表 2 中的列值更新表 1 中的列

案例1:

在更新发生之前,我需要表 1 中的 b、c 和 d 列匹配表 2 中的 b、c 和 d

案例2:

表 1 中的列 b 具有真值,但表 2 中的列 b 引用查找(表 1 中的示例,列 b 的值可能为蓝色,但在表 2 中,列 b 的值为 14567,这是引用蓝色的查找表中的 id)

您将如何完成此更新?

将表 ta 创建为 选择1个ID,"亚历克斯"姓名,27岁从双 联盟 选择2个ID,"鲍勃"名字,32岁从双;

将表 TB 创建为 选择1个ID,"亚历克斯"姓名,29岁从双 联盟 选择5个ID,"迪克"名字,24岁从双;

更新 TA A 设置 a.age = (从 TB b 中选择 b.age,其中 a.id=b.id 和 b.name=a.name) 存在的位置(从 TB 中选择 1,其中 a.id=tb.id 和 a.name = tb.name);

假设表lookup有列b(对应于t2.b)和col_x列(对应于t1.b),你可以使用merge语句做这样的事情:

merge into t1
using (
select t2.a, l.col_x, t2.c, t2.d
from   t2 join lookup l on t2.b = l.b
) s
on (t1.b = s.col_x and t1.c = t2.c and t1.d = t2.d)
when matched then update
set  t1.a = s.a
;

最新更新