我在主机A上具有架构A,具有员工名称,等等。我在主机B上具有架构B,其员工旅行成本。两个模式上的ID_EMPLOYEE密钥相同。 模式A使用新名称进行更新(用于匿名过程)。我需要从架构A上的新名称更新架构B上的名称字段。 请注意,在添加新名称(新员工)时,应用程序将其添加到方案A和方案B上,但仅架构A被匿名化。
不知道如何以较少的SQL技能来做到这一点
答案 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。