小编典典

SQL使用CASE语句更新列中的行

sql

我有两个表,Users和#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)

我们将此称为ResultSet。我希望对我的UPDATE语句有所帮助。我想做的是:

UPDATE Users
SET IsActive = (CASE WHEN User.UserName IN ResultSet THEN 0 ELSE 1 END)

不必为每个User.UserName写出CASE WHEN。提前致谢!


阅读 294

收藏
2021-05-23

共1个答案

小编典典

您可以在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

注意事项:

  • 您也可以使用子查询,但是会慢很多(n阶的平方而不是n阶)。对于少数用户而言,这无关紧要。

  • 我并 没有 测试 ,所以我可以在上面的代码输入错误/缺陷


基于关于此操作不可行的疯狂评论,我实施了一个小提琴。

享受它的工作:

http://sqlfiddle.com/#!6/25235/3

2021-05-23