仅当两个表中都存在员工时才从临时表中更新员工 ID

Posted

技术标签:

【中文标题】仅当两个表中都存在员工时才从临时表中更新员工 ID【英文标题】:Update employee ID from temp table only if employee exists in both tables 【发布时间】: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 语句)和预期结果将帮助我们在这里为您提供帮助。 【参考方案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)

【讨论】:

以上是关于仅当两个表中都存在员工时才从临时表中更新员工 ID的主要内容,如果未能解决你的问题,请参考以下文章

仅当表中不存在两个 id 的组合时才将值插入表中

仅当连接明确时才更新行

仅当表中不存在该值时才更新 SQL 列

4.09 当相应行存在时更新

仅当记录不存在时才将 SQL 插入表中[重复]

sql Oracle:仅当值存在时才从另一个表中插入值