仅当值不同时,才从不同实例上的模式A更新到模式B

时间:2018-09-24 10:18:02

标签: sql oracle11g

我在主机A上具有架构A,具有员工名称,等等。我在主机B上具有架构B,其员工旅行成本。两个模式上的ID_EMPLOYEE密钥相同。 模式A使用新名称进行更新(用于匿名过程)。我需要从架构A上的新名称更新架构B上的名称字段。 请注意,在添加新名称(新员工)时,应用程序将其添加到方案A和方案B上,但仅架构A被匿名化。

不知道如何以较少的SQL技能来做到这一点

1 个答案:

答案 0 :(得分:-1)

还有其他要加入的钥匙吗?如果a.ID_EMPLOYEE发生变化,但是a.EmployeeName保持不变并且是唯一的,则只需在b上写一条update语句来更新b.ID_EMPLOYEE。像

UPDATE b
SET b.ID_EMPLOYEE = a.ID_EMPLOYEE
FROM b
JOIN a
ON b.EmployeeName = a.EmployeeName

编辑:这是MS SQL语法。这是一个Oracle友好版本

UPDATE b
SET b.ID_EMPLOYEE = (SELECT a.ID_EMPLOYEE
                 FROM a
                 WHERE b.EmployeeName = a.EmployeeName)
WHERE EXISTS (SELECT a.ID_EMPLOYEE
                 FROM a
                 WHERE b.EmployeeName = a.EmployeeName);

如果b中没有其他匹配的唯一字段,并且在更新发生后的任何地方都未维护旧的a.ID_EMPLOYEE,则您必须有一个“中间人”表来存储旧的a.ID_EMPLOYEE和b .ID_EMPLOYEE。如果您有该表(我们将其称为c),则只需两个步骤即可更新c,然后更新b。