【问题标题】:Update employee ID from temp table only if employee exists in both tables仅当两个表中都存在员工时才从临时表中更新员工 ID
【发布时间】:2020-07-27 11:43:42
【问题描述】:

我在名为 T_USR 的数据库中有一个表,其中包括以下字段:-

USRUID (Primary Key)
USRID <- This is the current employee ID

我还有一个从 CSV 文件填充的临时表 #TEMP3,其中包括:

USRUID (the value of this field will match the Primary Key in T_USR)
EMPID <- This is to be the new employee ID

#TEMP3 仅包含在 T_USR 中找到的用户子集

我需要的是一个查询,仅当两个表中都存在员工 (USRUID) 时,才使用来自 #TEMP3.EMPID 的值更新 T_USR.USRID 的值。

这是我写的查询,但是对于出现在 T_USR 和 #TEMP3 中 NOT 的用户,USRID 字段设置为 NULL,这不是必需的结果。对于未出现在两个表中的用户,我希望他们的详细信息保持不变。

Update dbo.T_USR
SET dbo.T_USR.USRID = 
(SELECT dbo.#TEMP3.EMPID
FROM #TEMP3
Where dbo.T_USR.USRUID = dbo.#TEMP3.USRUID
and exists (
select * from #TEMP3 where dbo.T_USR.USRUID = #TEMP3.USRUID)
)

如果有任何建议,我将不胜感激。谢谢。

【问题讨论】:

  • 消耗性样本数据(如 DDL 和 DML 语句)和预期结果将帮助我们在这里为您提供帮助。

标签: sql sql-server sql-update


【解决方案1】:

使用join。如果我理解正确:

update u
    set u.usrid = t.empid
    from dbo.T_USR u join
         #temp3 t
         on u.usruid = t.usruid

【讨论】:

    【解决方案2】:

    使用这个:

    UPDATE t
    SET USRID = EMPID
     FROM #TEMP3 te
    JOIN dbo.T_USR t ON t.USRUID = te.USRUID
    

    【讨论】:

      【解决方案3】:

      使用以下查询,它将只更新两个表上存在的行。

      Update dbo.T_USR
      SET dbo.T_USR.USRID = 
      (SELECT dbo.#TEMP3.EMPID
      FROM #TEMP3
      Where dbo.T_USR.USRUID = dbo.#TEMP3.USRUID
      )
      WHERE  exists (
      select * from #TEMP3 AS TT where dbo.T_USR.USRUID = TT.USRUID)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-26
        • 2020-11-23
        • 2021-04-02
        • 1970-01-01
        相关资源
        最近更新 更多