gpt4 book ai didi

集合中的 SQL Case 语句;它总是火吗?

转载 作者:行者123 更新时间:2023-12-01 23:51:16 27 4
gpt4 key购买 nike

我想知道是否在以下声明中:

  UPDATE u 
SET u.isactive =
(
CASE WHEN e.LVStatus<>'B' AND u.IsActive=1 AND u.AutoUpdate=1 THEN
0
WHEN e.LVStatus='B' AND u.IsActive=0 AND u.AutoUpdate=1 THEN
1 END
),
u.UpdatedB y= 0
FROM tbl_e e
INNER JOIN tbl_Users u ON e.id=u.id

如果不满足case语句中的条件,例如u.IsActive=1和e.LVStatus='B',查询是否仍然设置u.UpdatedBy=0?我希望如果不满足 case 语句中的条件,那么什么也不做,也许如果我想要这种行为,我只需要将更新语句与不同的 where 子句分开。谢谢!

最佳答案

由于您的查询无条件地将 u.UpdatedBy 设置为零,所以答案是肯定的,无论 的结果如何,都将设置 u.UpdatedBy 的值>CASE 表达式,通过它设置 u.isactive

为了克服这个问题,您可以为 u.UpdatedBy 字段添加一个单独的 CASE 表达式,并在满足其他 CASE 条件时使用当前值 语句不满足:

UPDATE u 
SET u.isactive = CASE
WHEN e.LVStatus<>'B' AND u.IsActive=1 AND u.AutoUpdate=1 THEN 0
WHEN e.LVStatus='B' AND u.IsActive=0 AND u.AutoUpdate=1 THEN 1
ELSE u.isactive
END
, u.UpdatedBy= CASE
WHEN (e.LVStatus<>'B' AND u.IsActive=1 AND u.AutoUpdate=1) OR
(e.LVStatus='B' AND u.IsActive=0 AND u.AutoUpdate=1)
THEN 0
ELSE u.UpdatedBy
END
FROM tbl_e e
INNER JOIN tbl_Users u ON e.id=u.id

或者,您可以将该条件移动到 WHERE 子句中,如下所示:

UPDATE u 
SET u.isactive = CASE
WHEN e.LVStatus<>'B' AND u.IsActive=1 AND u.AutoUpdate=1 THEN 0
WHEN e.LVStatus='B' AND u.IsActive=0 AND u.AutoUpdate=1 THEN 1
-- No ELSE is needed, because WHERE filters out all other cases
END
, u.UpdatedBy=0
FROM tbl_e e
INNER JOIN tbl_Users u ON e.id=u.id
WHERE (e.LVStatus<>'B' AND u.IsActive=1 AND u.AutoUpdate=1) OR
(e.LVStatus='B' AND u.IsActive=0 AND u.AutoUpdate=1)

关于集合中的 SQL Case 语句;它总是火吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26364255/

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