gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:38:43 26 4
gpt4 key购买 nike

我有两个表,Users 和#TempTable(它是 Users 的子集)。我想更新 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

注释:

  • 您也可以使用子查询,但这会慢得多(n 平方的顺序而不是 n 的顺序)。对于少数用户来说,这并不重要。

  • 没有 测试 ,因此上面的代码中可能存在拼写错误/错误

<小时/>

基于关于这行不通的疯狂评论,我实现了一个 fiddle 。

享受工作的乐趣:

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

关于SQL 使用 CASE 语句更新列中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com