仅当两个表中都存在员工时才从临时表中更新员工 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的主要内容,如果未能解决你的问题,请参考以下文章