gpt4 book ai didi

sql-server - 基于 COUNT 的 SQL UPDATE

转载 作者:行者123 更新时间:2023-12-03 16:47:20 29 4
gpt4 key购买 nike

我有一个如下所示的表格

ID   |   action   |  flag
1 | A | 1
1 | A | 1
1 | B | 1
2 | A | 1
2 | A | 1
2 | B | 1
2 | B | 1

我想要执行以下操作:如果对于相同的 IDaction 列中的值 B 出现的次数多于 1时间,然后我想将此IDflag列设置为0

结果应该是这样的:

ID   |   action   |  flag
1 | A | 1
1 | A | 1
1 | B | 1
2 | A | 0
2 | A | 0
2 | B | 0
2 | B | 0

我知道两种方法:

  • 使用子查询:但是我不想使用子查询,因为我处理的是大表,子查询会降低性能
  • 使用临时查找表:我创建​​了一个临时查找表,其中存储了 action 中具有值 BIDs列超过 1 次,然后我将临时表与原始表join 以找到我将为其设置 IDs标记0

除了上述两个之外,还有其他选择吗?理想情况下在一个查询中(没有子查询和临时查找表)。我在考虑像 JOIN 这样的东西,其中 JOIN 子句包含像 GROUP BYHAVING 这样的东西,但是直到现在我才成功..

最佳答案

这样的东西应该适合你:

UPDATE t
SET flag = 0
FROM Table t
INNER JOIN
(
SELECT Id
FROM Table
WHERE action = 'B'
GROUP BY Id
HAVING COUNT(*) > 1
) d ON t.Id = d.Id

关于sql-server - 基于 COUNT 的 SQL UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41822982/

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