我有两个表,用户和#TempTable(它是用户的子集)。我想更新 Users 表中的 IsActive 列。如果 #TempTable 中的用户也在 Users 表中,我想设置 IsActive = 1,否则设置 IsActive = 0。
从不在 #TempTable 中的用户获取用户(对于这些用户,IsActive 应设置为 0):
-- (Users \ #TempTable) U (#TempTable \ Users)
SELECT u.UserName
FROM Users u
WHERE (u.UserName) NOT IN
(SELECT t.[User Name] FROM #TempTable t)
UNION ALL
SELECT t.[User Name]
FROM #TempTable t
WHERE (t.[User Name]) NOT IN
(SELECT u.UserName FROM Users u)
我们称之为结果集。我希望对我的更新声明有所帮助。我希望能够做的是:
UPDATE Users
SET IsActive = (CASE WHEN User.UserName IN ResultSet THEN 0 ELSE 1 END)
无需为每个 User.UserName 写出 CASE WHEN。提前致谢!
您可以在 UPDATE 语句中使用联接。
UPDATE Users
SET Users.Active = CASE WHEN T.UserName is null THEN 0 ELSE 1 END
FROM Users AS U
LEFT JOIN #TempTable AS T ON U.UserName = T.UserName
Notes :
基于关于这行不通的疯狂评论,我实现了一个小提琴。
享受工作的乐趣:
http://sqlfiddle.com/#!6/25235/3 http://sqlfiddle.com/#!6/25235/3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)